我正在用Python 3.3编写。
我有一组嵌套字典(如下所示),我尝试使用最低级别的键进行搜索,并返回与第二级相对应的每个值。
Patients = {}
Patients['PatA'] = {'c101':'AT', 'c367':'CA', 'c542':'GA'}
Patients['PatB'] = {'c101':'AC', 'c367':'CA', 'c573':'GA'}
Patients['PatC'] = {'c101':'AT', 'c367':'CA', 'c581':'GA'}
我正在尝试使用一组'for loops'来搜索在主患者字典下嵌套的每个Pat *字典中附加到c101键的值。
这是我到目前为止所做的:
pat = 'PatA'
mutations = Patients[pat]
for Pat in Patients.keys(): #iterate over the Pat* dictionaries
for mut in Pat.keys(): #iterate over the keys in the Pat* dictionaries
if mut == 'c101': #when the key in a Pat* dictionary matches 'c101'
print(mut.values()) #print the value attached to the 'c101' key
我收到以下错误,建议我的for循环将每个值作为字符串返回,然后这不能用作字典键来提取值。
追踪(最近的呼叫最后):
文件“filename”,第13行,in
for Pat.keys()中的mut: AttributeError:'str'对象没有属性'keys'
我认为我遗漏了与词典课明显相关的一些内容,但我无法确切地说出它是什么。我已经浏览了this question,但我不认为这正是我所要求的。
非常感谢任何建议。
答案 0 :(得分:2)
Patients.keys()
为您提供患者字典(['PatA', 'PatC', 'PatB']
)中的键列表,而不是值列表,因此错误。您可以使用dict.items
迭代key:value对,如下所示:
for patient, mutations in Patients.items():
if 'c101' in mutations.keys():
print(mutations['c101'])
使代码正常工作:
# Replace keys by value
for Pat in Patients.values():
# Iterate over keys from Pat dictionary
for mut in Pat.keys():
if mut == 'c101':
# Take value of Pat dictionary using
# 'c101' as a key
print(Pat['c101'])
如果您愿意,可以使用简单的单行创建突变列表:
[mutations['c101'] for p, mutations in Patients.items() if mutations.get('c101')]
答案 1 :(得分:0)
Patients = {}
Patients['PatA'] = {'c101':'AT', 'c367':'CA', 'c542':'GA'}
Patients['PatB'] = {'c101':'AC', 'c367':'CA', 'c573':'GA'}
Patients['PatC'] = {'c101':'AT', 'c367':'CA', 'c581':'GA'}
for keys,values in Patients.iteritems():
# print keys,values
for keys1,values1 in values.iteritems():
if keys1 is 'c101':
print keys1,values1
#print values1