python - 为什么我的代码在从 dict 中提取值时不起作用

标签 python list dictionary

我浏览了链接 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/

相关文章:

python - 如何从gensim的word2vec中提取词汇向量?

c# 从列表中统一选择N个元素,不进行shuffle

c++ - 这种无序 map 的使用是否有效/正确?

python - 迭代列表并按位置从嵌套字典返回值

c++ - xcode 中的泄漏 c++ 列表

javascript - 如何获取 Symbol 属性的值

Python 列表(切片法)

python - 在 Python 中重现 R 的高斯过程最大似然回归

python - 将文本添加到 pandas dataframe plot

python - 如何读取文件夹中的文件名并按字母顺序和递增顺序访问它们?