如何获取名为' 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
答案 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文档