0

我正在用 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 循环”来搜索拉出附加到每个 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 循环将每个值作为字符串返回,并且不能将其用作字典键来提取值。

Traceback(最近一次调用最后):
文件“文件名”,第 13 行,
在 Pat.keys() 中的 for mut:AttributeError:'str' 对象没有属性 'keys'

我想我错过了与字典类有关的一些明显的东西,但我不能完全说出它是什么。我已经看过这个问题,但我认为这不是我要问的。

任何建议将不胜感激。

4

2 回答 2

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')]
于 2013-09-24T13:32:58.457 回答
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
于 2016-09-27T14:19:25.833 回答