在Python 3.3中访问嵌套字典中的嵌套值

时间:2013-09-24 13:27:56

标签: for-loop dictionary python-3.x nested

我正在用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,但我不认为这正是我所要求的。

非常感谢任何建议。

2 个答案:

答案 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