2014-02-20 29 views
-1

我有一個非常大的字典。這裏是我的字典裏的一小部分:基於特定值的過濾在Python中的大字典

dictionary = {'1': {'a':'aa','b':'bb','c':'cc','d':'dd'}, 
       '2': {'a':'aa','b':'bb','c':'cc','d':'dd'}, 
       '3': {'a':'aa','b':'bb','c':'cc','d':'dd'} } 

我只是想篩選出一個&℃。

所需的輸出:

dictionary = { '1': {'a':'aa','c':'cc'}, 
       '2': {'a':'aa','c':'cc'}, 
       '3': {'a':'aa','c':'cc'} } 
+0

你嘗試過什麼到目前爲止:

def filtered_dicts(d, keys): return {k: {vk: v[vk] for vk in v.keys() & keys} for k, v in d.items()} 

使用Python 3快速演示?什麼不起作用?你在哪裏遇到麻煩? – daveydave400

+0

你字面上有一個由字符串整數索引的字典嗎?你有沒有考慮過使用列表?所有的內部字典都有相同的密鑰嗎? – geoffspear

回答

2

字典解析來救援:

{k: {'a': v['a'], 'c': v['c']} for k, v in dictionary.iteritems()} 

這是假設所有的字典有這些按鍵設置和您正在使用Python 2.7。

更寬泛的版本:

def filtered_dicts(d, keys): 
    return {k: {vk: v[vk] for vk in v.viewkeys() & keys} for k, v in d.iteritems()} 

dictionary = filtered_dicts(dictionary, {'a', 'c'}) 

這會工作,即使鍵是不存在的dictionary所有值。

任何迭代將在這裏做keys;我在這裏使用了set文字,但是列表或元組甚至字符串也可以工作。

一個Python 3版本,後者的:

>>> dictionary = {'1': {'a':'aa','b':'bb','c':'cc','d':'dd'}, '2': {'a':'aa','b':'bb','c':'cc','d':'dd'}, '3':{'a':'aa','b':'bb','c':'cc','d':'dd'}} 
>>> def filtered_dicts(d, keys): 
...  return {k: {vk: v[vk] for vk in v.keys() & keys} for k, v in d.items()} 
... 
>>> filtered_dicts(dictionary, {'a', 'c'}) 
{'3': {'c': 'cc', 'a': 'aa'}, '2': {'c': 'cc', 'a': 'aa'}, '1': {'c': 'cc', 'a': 'aa'}} 
+0

完美...謝謝... – ManikandanV

相關問題