我有 13 個串列和一個根據用戶輸入更改的字典,字典從 13 個串列中選擇串列,它們的名稱是鍵,它們的值是串列的值,它根據用戶輸入而變化,所以它可能有 1 ,2,3,4,5,.... 列出但不可能是 13 max 是 11 或 9 我認為,
我想要的是將此字典更改為名稱與我預先定義的名稱不同的集合或串列(鍵 亂數或其他名稱)并且與字典具有相同的值,我不能使用名稱關鍵是因為它是隨機的,并且根據用戶輸入而變化,這就是為什么我試圖以某種方式對其進行索引或將其更改為串列或設定以使用它
讓我詳細解釋一下:
好的,所以我有以下功能
def loopD(user,dis):
count = 0
for i in range(len(user)):
if dis.count(user[i]):
count = 1
return count
此代碼采用“user”和“dis”兩個串列,它查找公共元素并根據公共元素的數量回傳計數。和這個功能
def loopA(user,**kwargs):
all_values = args.values()
max_value = max(all_values)
final = {key: val for key, val in args.items() if val == max_value}
commonlist = list(final.keys())
commondict = {}
for i in range(len(commonlist)):
commondict[commonlist[i]] = eval(commonlist[i])
“用戶”與“kwargs”之前的用戶串列相同,是來自 13 個串列中的一堆其他串列名稱,它們具有共同的元素,用戶串列如“anyname = loopD(user,dis)”
所以字典是用用戶串列中的名稱和公共元素創建的,串列的名稱就像 13 個,每個都有一堆元素,例如它們至少有 5-6 個元素
串列 A 與串列 B 有 3 個公共元素
和串列 C 的 5 個公共元素
但串列 B 有 2 個公共元素,串列 C 可能包含或不包含在 A 中
所以函式中的這段代碼
all_values = args.values()
max_value = max(all_values)
final = {key: val for key, val in args.items() if val == max_value}
獲取公共元素的最大值,然后過濾字典,因此它只包含具有最大公共元素的串列,現在其余的代碼是我試圖獲取字典中元素的鍵作為串列的名稱或set 和 value 作為這個集合或串列的值
commonlist = list(final.keys())
commondict = {}
for i in range(len(commonlist)):
commondict[commonlist[i]] = eval(commonlist[i])
我為什么要這樣做?
我想使用第一個函式來過濾這些具有最大公共元素的串列,因為每個串列都有一個在其他串列中不存在的唯一元素
因此,如果用戶例如輸入了 4 個元素,并且這些元素之一是唯一元素,那么它將列印具有此唯一元素的串列的名稱
I doing this scenario because the user can input 5 elements 4 in a list including the unique element and the last one is just a common one that's is not in that list and that is the reason why I get 4-5 lists that has the same value of common elements.
For Example:
lista = [1,2,3,5,"BANANAS"]
listb = [1,2,4,5,6,"APPLE"]
listc = [1,2,3,4,5,"BLUE"]
listd = [1,2,5,"RED"]
liste = [4,5,"YELLOW"]
user = [1,2,4,5,"BANANAS"]
# code output right now
kwargs= {'lista' : 4, 'listb' : 4, 'listc' : 4 , 'listd' : 3, 'liste' : 2}
# after functions
final = {'lista' : 4, 'listb' : 4, 'listc' : 4}
commondict = {'lista' : [1,2,3,5,"BANANAS"]
, 'listb' : [1,2,4,5,6,"APPLE"], 'listc' : [1,2,3,4,5,"BLUE"]}
# What I am trying to do here is to get from this commondict are 3 variables as lists or
# Sets then search for the common elements between each one of them then REMOVE them So I
# Get the 3 Variables like this
lista = ["BANANAS"]
listb = [6,"APPLE"]
listc = ["BLUE"]
# And then compare them to the user [1,2,4,5,"BANANAS"] looking for the common element
output = 'lista'
#because it is the only one that has the unique element in user
and this is where I couldn't continue the function and I can't use the key of the dictionary because I don't know it in the first place because the user can change the elements of his list and it will give me a whole new dictionary
if you are interested here is the full script
cystic_fibrosis = ['Coughing with or without mucus','Difficulty Breathing','Wheezing','Diarrhea'
,'Recurring chest infections','Damage to the airways (bronchiectasis)'
,'Difficulty putting on weight and growing','Yellowing of the skin'
,'The whites of the eyes (jaundice)','Constipation or large, smelly poo'
,'a bowel obstruction in newborn babies']
asthma = ['Coughing with or without mucus','Difficulty Breathing','Tiredness and fatigue'
,'Wheezing','Rapid heartbeat','fast breath','change in the color of the fingers','Blue lips']
lung_cancer = ['Coughing with or without mucus','Difficulty Breathing','Tiredness and fatigue'
,'Chest pain','Wheezing','Weight loss','Coughing up blood']
covid19 = ['Coughing with or without mucus','Difficulty Breathing','Tiredness and fatigue','Chest pain'
,'Headaches','Diarrhea','change in the color of the fingers','Fever','Loss of sense of taste or smell'
,'Sore throat','body aches and pains','change in the color of the toes'
,'Eye redness or irritation Serious symptom','Loss of speech, movement, or confusion']
emphysema = ['Coughing with or without mucus','Wheezing','Tightness in your chest'
,'Whistling / squeaky sound when you breathe']
Bronchitis = ['Coughing with or without mucus','Tiredness and fatigue','Chest pain','Mild headache'
,'body aches and pains','Sore throat']
pneumothorax = ['Chest pain','Rapid heartbeat','fast breath','Blue lips','Tightness in your chest'
,'Painful breathing','Confusion or Dizziness','Loss of consciousness or coma']
pleural_effusion = ['Coughing with or without mucus','Difficulty Breathing','Chest pain','Painful breathing']
empyema = ['Coughing with or without mucus','Difficulty Breathing','Tiredness and fatigue','Chest pain'
,'Weight loss','Headaches','Loss of appetite','Sweating','Fever','Decreased breath sounds'
,'A Case pneumonia that does not improve','A crackling sound from the chest']
hemothorax = ['Difficulty Breathing','Tiredness and fatigue','Chest pain','Rapid heartbeat','fast breath'
,'Anxiety','Pale, Cool and Clammy skin','High fever over 100°F (38°C)','Low blood pressure']
tuberculosis = ['Coughing with or without mucus','Tiredness and fatigue','Weight loss','Loss of appetite'
,'Sweating','High temperature','Swellings in the neck']
Pulmonary_fibrosis = ['Coughing with or without mucus','Difficulty Breathing','Tiredness and fatigue'
,'Weight loss','Aching muscles and joints'
,'Widening and rounding of the tips of the fingers or toes(Clubbing)']
pneumonia = ['Coughing with or without mucus','Difficulty Breathing','Tiredness and fatigue','Chest pain'
,'Rapid heartbeat','Headaches','Loss of appetite','Sweating','High temperature','Coughing up blood'
,'Aching muscles and joints','Feeling generally unwell','Shivering']
diseases = ['Coughing with or without mucus','Difficulty Breathing','Tiredness and fatigue','Chest pain','High fever over 100°F (38°C)']
def loopa(user,**args):
all_values = args.values()
max_value = max(all_values)
final = {key: val for key, val in args.items() if val == max_value}
commonlist = list(final.keys())
commondict = {}
for i in range(len(commonlist)):
commondict[commonlist[i]] = eval(commonlist[i])
def loopd(user,dis):
count = 0
for i in range(len(user)):
if dis.count(user[i]):
count = 1
return count
loopa(diseases,cystic_fibrosis= loopd(diseases,cystic_fibrosis),asthma= loopd(diseases,asthma)
,lung_cancer= loopd(diseases,lung_cancer),covid19= loopd(diseases,covid19)
,emphysema= loopd(diseases,emphysema),Bronchitis= loopd(diseases,Bronchitis)
,pneumothorax= loopd(diseases,pneumothorax),pleural_effusion= loopd(diseases,pleural_effusion)
,empyema= loopd(diseases,empyema),hemothorax= loopd(diseases,hemothorax)
,tuberculosis= loopd(diseases,tuberculosis),Pulmonary_fibrosis= loopd(diseases,Pulmonary_fibrosis)
,pneumonia=loopd(diseases,pneumonia))
uj5u.com熱心網友回復:
您的代碼有幾個問題:
- 您將每種疾病定義為一個單獨的變數,這意味著您以后需要按名稱單獨參考它們;更合適的資料結構是將它們全部放在一個字典中,以癥狀串列作為值,以疾病名稱作為鍵。
- 您計算每種疾病中提到癥狀的頻率,但我只能假設沒有癥狀被提到兩次,所以總是 0 或 1?
- 您
eval()用來評估關鍵字引數名稱的名稱,只是因為它恰好與您命名的疾病變數對齊;這對錯誤非常敏感,任何一個錯別字都行不通;更糟糕的是,如果您的疾病名稱恰好在 Python 中有其他含義,那么現在將對其進行評估 -eval()在大多數情況下是邪惡的,請避免使用它。 - 您的代碼呼叫
loopa,但沒有回傳任何內容,因此最終什么也沒有發生 - 疾病名稱和描述中大寫和小寫的使用不是很一致,因此任何人都很難輸入您所做的確切描述(包括正確的大小寫)
這是您的代碼,但沒有上述問題:
import pprint
diseases_with_symptoms = {
'cystic_fibrosis': [
'Coughing with or without mucus', 'Difficulty Breathing', 'Wheezing', 'Diarrhea'
, 'Recurring chest infections', 'Damage to the airways (bronchiectasis)'
, 'Difficulty putting on weight and growing', 'Yellowing of the skin'
, 'The whites of the eyes (jaundice)', 'Constipation or large, smelly poo'
, 'a bowel obstruction in newborn babies'],
'asthma': [
'Coughing with or without mucus', 'Difficulty Breathing', 'Tiredness and fatigue'
, 'Wheezing', 'Rapid heartbeat', 'fast breath', 'change in the color of the fingers'
, 'Blue lips'],
'lung_cancer': [
'Coughing with or without mucus', 'Difficulty Breathing', 'Tiredness and fatigue'
, 'Chest pain', 'Wheezing', 'Weight loss', 'Coughing up blood'],
'covid19': [
'Coughing with or without mucus', 'Difficulty Breathing', 'Tiredness and fatigue'
, 'Chest pain', 'Headaches', 'Diarrhea', 'change in the color of the fingers', 'Fever'
, 'Loss of sense of taste or smell', 'Sore throat', 'body aches and pains'
, 'change in the color of the toes', 'Eye redness or irritation Serious symptom'
, 'Loss of speech, movement, or confusion'],
'emphysema': [
'Coughing with or without mucus', 'Wheezing', 'Tightness in your chest'
, 'Whistling / squeaky sound when you breathe'],
'Bronchitis': [
'Coughing with or without mucus', 'Tiredness and fatigue', 'Chest pain',
'Mild headache'
, 'body aches and pains', 'Sore throat'],
'pneumothorax': [
'Chest pain', 'Rapid heartbeat', 'fast breath', 'Blue lips', 'Tightness in your chest'
, 'Painful breathing', 'Confusion or Dizziness', 'Loss of consciousness or coma'],
'pleural_effusion': [
'Coughing with or without mucus', 'Difficulty Breathing', 'Chest pain'
, 'Painful breathing'],
'empyema': [
'Coughing with or without mucus', 'Difficulty Breathing', 'Tiredness and fatigue'
, 'Chest pain', 'Weight loss', 'Headaches', 'Loss of appetite', 'Sweating', 'Fever'
, 'Decreased breath sounds', 'A Case pneumonia that does not improve'
, 'A crackling sound from the chest'],
'hemothorax': [
'Difficulty Breathing', 'Tiredness and fatigue', 'Chest pain', 'Rapid heartbeat'
, 'fast breath', 'Anxiety', 'Pale, Cool and Clammy skin', 'High fever over 100°F (38°C)'
, 'Low blood pressure'],
'tuberculosis': [
'Coughing with or without mucus', 'Tiredness and fatigue', 'Weight loss'
, 'Loss of appetite', 'Sweating', 'High temperature', 'Swellings in the neck'],
'Pulmonary_fibrosis': [
'Coughing with or without mucus', 'Difficulty Breathing', 'Tiredness and fatigue'
, 'Weight loss', 'Aching muscles and joints'
, 'Widening and rounding of the tips of the fingers or toes(Clubbing)'],
'pneumonia': [
'Coughing with or without mucus', 'Difficulty Breathing', 'Tiredness and fatigue'
, 'Chest pain', 'Rapid heartbeat', 'Headaches', 'Loss of appetite', 'Sweating'
, 'High temperature', 'Coughing up blood', 'Aching muscles and joints'
, 'Feeling generally unwell', 'Shivering']
}
patient_symptoms = [
'Coughing with or without mucus', 'Difficulty Breathing', 'Tiredness and fatigue'
, 'Chest pain', 'High fever over 100°F (38°C)']
def best_disease_matches(symptoms):
# you could still do this with count, but this seems simpler
symptom_counts = {
disease: sum(
1 if symptom.lower() in map(lambda s: s.lower(), disease_symptoms)
else 0 for symptom in symptoms
)
for disease, disease_symptoms in diseases_with_symptoms.items()
}
max_count = max(symptom_counts.values())
return [disease for disease, c in symptom_counts.items() if c == max_count]
patient_diseases = {disease: (diseases_with_symptoms[disease])
for disease in best_disease_matches(patient_symptoms)}
pprint.pprint(patient_diseases)
的唯一原因pprint是使輸出更具可讀性:
{'covid19': ['Coughing with or without mucus',
'Difficulty Breathing',
'Tiredness and fatigue',
'Chest pain',
'Headaches',
'Diarrhea',
'change in the color of the fingers',
'Fever',
'Loss of sense of taste or smell',
'Sore throat',
'body aches and pains',
'change in the color of the toes',
'Eye redness or irritation Serious symptom',
'Loss of speech, movement, or confusion'],
'empyema': ['Coughing with or without mucus',
'Difficulty Breathing',
'Tiredness and fatigue',
'Chest pain',
'Weight loss',
'Headaches',
'Loss of appetite',
'Sweating',
'Fever',
'Decreased breath sounds',
'A Case pneumonia that does not improve',
'A crackling sound from the chest'],
'hemothorax': ['Difficulty Breathing',
'Tiredness and fatigue',
'Chest pain',
'Rapid heartbeat',
'fast breath',
'Anxiety',
'Pale, Cool and Clammy skin',
'High fever over 100°F (38°C)',
'Low blood pressure'],
'lung_cancer': ['Coughing with or without mucus',
'Difficulty Breathing',
'Tiredness and fatigue',
'Chest pain',
'Wheezing',
'Weight loss',
'Coughing up blood'],
'pneumonia': ['Coughing with or without mucus',
'Difficulty Breathing',
'Tiredness and fatigue',
'Chest pain',
'Rapid heartbeat',
'Headaches',
'Loss of appetite',
'Sweating',
'High temperature',
'Coughing up blood',
'Aching muscles and joints',
'Feeling generally unwell',
'Shivering']}
因此,它輸出具有最大匹配數的疾病名稱,以及所有相關癥狀的串列,這似乎就是您正在做的事情。
不清楚的是這是否還有你想要解決的問題。您可以隨意構建patient_symptoms并且該演算法是非破壞性的,所以我認為這對您有用?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386396.html
標籤:python python-3.x list dictionary
上一篇:如何在python中以重復的特定順序對字典串列進行排序?
下一篇:遍歷不包含相同鍵的字典串列
