【问题标题】:Python find if any(key: value) in of list of dicts using comprehensionPython使用理解在字典列表中查找是否有(键:值)
【发布时间】:2015-03-28 03:09:42
【问题描述】:

我有一种情况,我正在接收一个 dicts 列表,需要确定该列表是否为空,或者某个值是否存在于可能接收到的任何 dicts 中的特定键:值对中。
例如:

[{"blim": "nancy","blam": "x","blah": "1"}, {"blim": "bob","blam": "a","blah": "1"}, {"blim": "joe","blam": "p","blah": "0"}]

我目前正在使用:

def foo(x, value):
    if not x: return True
    else:
        for y in x:
            if y["blah"] == value: return False
    return True

if foo(my_list, "0"):
    ...do truthy stuff here...

我更愿意做这样的事情:

if not x or not any y['blah'] == "0" in x:
    ...do truthy stuff here...

我已经阅读了过去 2 天里我能找到的关于使用理解的所有内容以及在我输入标题时提出的所有建议,但没有找到任何与此相关的内容。

我可以得到一个不错的发电机

for y in x: False if any(y['blah']) == "0" else True

我可以得到很多语法错误:

>>> x[y] for x[y]: if (x[y]['blah']=='0') in x
File "<stdin>", line 1
    x[y] for x[y]: if (x[y]['blah']=='0') in x
       ^
SyntaxError: invalid syntax

>>> if (not x) or (y for y: any(y['blah']) in x == '0': print('stuff'))
File "<stdin>", line 1
    if (not x) or (y for y: any(y['blah']) in x == '0': print('stuff'))
                      ^
SyntaxError: invalid syntax

...

我想我可能会接近:

>>> if not x or any(y['blah']) in x == '0': print('stuff')
...
>>>

但即使我的字典列表很简单,也没有输出:

>>> x
[{'blah', '0'},{'blah', '0'}]

我想我现在只是把我的大脑炸了,并且遗漏了一些明显的东西。任何帮助将不胜感激。

【问题讨论】:

    标签: list python-3.x dictionary list-comprehension dictionary-comprehension


    【解决方案1】:
    any(D.get('blah') == '0' for D in L)
    

    【讨论】:

    • 谢谢!!这很好用......当计时器到时,我会接受它作为答案。我还有几分钟要等。
    • 如果您要查找的元素是None,它将不起作用,但这就是dict.get() 的第三个参数的用途。
    • 我不知道为什么我没有想到 get()... 'blah' 的值将始终是 '1' 或 '0',所以这正是我需要的.再次感谢!
    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多