我有一个字典列表,我想获取python中每个dictinary中存在的相同元素

时间:2015-03-18 10:33:36

标签: python

如何获取名为' abc'的元素从Python的一系列词典(包含一个名为' abc'的键)中?

>>>y = [{123:'asd', 'xyz':'asff', 'zara':'afasf', 'abc':'afsff'},
     {123:'gfg', 'xyz':'sgggh', 'zara':'sghh', 'abc':'sfgbg'}];

>>>a=y[0]

>>>a

{123: 'asd', 'abc': 'afsff', 'xyz': 'asff', 'zara': 'afasf'}

>>>a['abc']
'afsff'

>>>b=y[0:2]

>>>b

[{123: 'asd', 'abc': 'afsff', 'xyz': 'asff', 'zara': 'afasf'},
{123:'gfg', 'xyz':'sgggh', 'zara':'sghh', 'abc':'sfgbg'}]

>>>b['abc']
-------------------------------------------------------------------------
TypeError                             Traceback (most recent call last)
<ipython-input-98-443ce66e30fa> in <module>()
----> 1 b['abc']

尝试时     TypeError:list indices必须是整数,而不是str

我需要输出类似于 afasf sfgbg

3 个答案:

答案 0 :(得分:3)

由于您的b变量在这种情况下是一个列表,您需要分别访问每个元素以查找字典中的值:

>>>b[0]['abc']
'afsff'
>>>b[1]['abc']
'sfgbg'

要一次性获取每个字典中的所有值,您可以使用for循环:

>>>for nested_dict in b:
...    nested_dict['abc']
'afsff'
'sfgbg'

此操作的简写将是列表理解,如下所示:

>>>[nested_dict['abc'] for nested_dict in b]
['afsff', 'sfgbg']

除非您想要打印所有值,否则这可能更容易使用,因为它会自行评估列表,并且可以随时操作。

答案 1 :(得分:2)

您需要每个字典的'abc'元素:

from operator import itemgetter

y = [{123:'asd', 'xyz':'asff', 'zara':'afasf', 'abc':'afsff'},
     {123:'gfg', 'xyz':'sgggh', 'zara':'sghh', 'abc':'sfgbg'}]

print( map(itemgetter('abc'), y) )  # --> ['afsff', 'sfgbg']

答案 2 :(得分:0)

@martineau的答案非常正确。

我应该提到的唯一例外是与Python解释器引发的异常相关联,如果密钥(在这种情况下为'abc',或者在任何其他未定义的情况下某些东西)不存在在列表的每个字典中。

为了简化你需要的值的提取,我可以建议像这样的

`
from operator import itemgetter

list_of_dicts = [{123:'asd', 'xyz':'asff', 'zara':'afasf', 'abc':'afsff'},
     {123:'gfg', 'xyz':'sgggh', 'zara':'sghh', 'abc':'sfgbg'}];
current_key = 'abc'

try:
    print [itemgetter(current_key)(d) for d in list_of_dicts]
except:
    print 'The key %s does not exist inside %s'%(current_key, list_of_dicts)
`

尝试阅读 itemgetter

的Python文档