我在Python中有2个嵌套字典,具有以下格式:
1166869: {'probL2': '0.000', 'probL1': '0.000', 'pronNDiff_site': '1.000', 'StateBin': '0', 'chr': 'chrX', 'rangehist': '59254000-59255000', 'start_bin': '59254000', 'countL2': '4', 'countL1': '0'}
1166870: {'probL2': '0.148', 'probL1': '0.000', 'pronNDiff_site': '0.851', 'StateBin': '0', 'chr': 'chr2', 'rangehist': '59254000-59255000', 'start_bin': '59255000', 'countL2': '5', 'countL1': '15'}
1166871: {'probL2': '0.000', 'probL1': '0.000', 'pronNDiff_site': '1.000', 'StateBin': '0', 'chr': 'chrY', 'rangehist': '59290000-59291000', 'start_bin': '59290000', 'countL2': '1', 'countL1': '2'}
Run Code Online (Sandbox Code Playgroud)
其中1166869,11668和1166871表示我从中读取数据的文件中的一行,其余的键是数据本身.
现在我想创建一个列表,我将所有不同的值存储在键"chr"中,因为有一些重复的值.
如何浏览字典并对2个值进行比较?此代码无效:
for k in range(len(file_dict)):
for j in range(len(file_dict)-1):
if (file_dict[j]["chr"] != file_dict[k]["chr"]):
list_chr.append(file_dict[j]["chr"])
Run Code Online (Sandbox Code Playgroud)
使用一套,只需一次性使用所有项目:
chr = { v['chr'] for v in file_dict.itervalues() }
Run Code Online (Sandbox Code Playgroud)
这使用集合理解在一行代码中生成您的集合.
在Python 2.7中引入了集合理解; 在早期版本中使用:
chr = set(v['chr'] for v in file_dict.itervalues())
Run Code Online (Sandbox Code Playgroud)
在Python 3中,您需要替换.itervalues()为.values().
你自己的代码不起作用,因为python词典不是列表; 您不是按索引检索值,而是按键检索值.您必须将其更改为:
for key in file_dict:
for other_key in file_dict:
if key == other_key:
continue
if file_dict[key]['chr'] != file_dict[otherkey]['chr']:
list_chr.append(filed_dict[key]['chr'])
Run Code Online (Sandbox Code Playgroud)
但是这是真的效率低下,更何况不正确.
| 归档时间: |
|
| 查看次数: |
9879 次 |
| 最近记录: |