首页 > 解决方案 > 为什么我的代码在从 dict 中提取值时不起作用

问题描述

我浏览了Accessing Python dict values with key start characters的链接

my = [{'k1': 'a','k2': '1234','k3':'12'},
    {'k1': 'a','k2': '1295','k3':'12'}]

for i in my:
    #print ([ v for k,v in i.items() if str(v).startswith('12')])
    print ([ v for k,v in i.items() if i['k2'].startswith('12')])

我的出

['a', '1234', '12']
['a', '1295', '12874']

预期的

['1234']
['1295']

标签: pythonlistdictionary

解决方案


您可以跳过外部列表并使用列表推导:

my = [{'k1': 'a','k2': '1234','k3':'12'},
    {'k1': 'a','k2': '1295','k3':'12'}]

print([x['k2'] for x in my if x['k2'].startswith('12')])

原始代码的问题是,i如果它有'k2'一个值以'12'. 它可以写成:

for i in my:
    if i['k2'].startswith('12'):
        print(i['k2'])

请注意,代码引发了一个KeyErrorif'k2'不存在于其中一个字典上,因此您可以使用

[x['k2'] for x in my if 'k2' in x and x['k2'].startswith('12')]

如果您预料到这种情况。


推荐阅读