我浏览了链接 Accessing Python dict values with the 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']
最佳答案
您可以跳过外部列表并使用列表理解:
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'])
请注意,如果其中一个字典中不存在 'k2'
,代码会引发 KeyError
,因此您可以使用
[x['k2'] for x in my if 'k2' in x and x['k2'].startswith('12')]
如果您预料到这种情况。
关于python - 为什么我的代码在从 dict 中提取值时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152041/