gpt4 book ai didi

Python检查字典中的列表是否满足两个条件

转载 作者:行者123 更新时间:2023-12-02 06:09:22 25 4
gpt4 key购买 nike

给定下面的列表1,如何返回一个新列表,其中“codes”的值包含字符串“Two”但不包含字符串“One”?

# Example, given list1:
list1 = [{'id': 11, 'codes': ['OneSeven', 'TwoThree']}, {'id': 22, 'codes': ['FiveTwoSix', 'Four', 'FourFive']}, {'id': 33, 'codes': ['SixSeven', 'OneSix']}]

# Return list with element where 'id': 22 since the string 'Two' is in codes but 'One' isn't.
list2 = [{'id': 22, 'codes': ['FiveTwoSix', 'Four', 'FourFive']}]

最佳答案

# Example, given list1:
list1 = [{'id': 11, 'codes': ['OneSeven', 'TwoThree']}, {'id': 22, 'codes': ['FiveTwoSix', 'Four', 'FourFive']}, {'id': 33, 'codes': ['SixSeven', 'OneSix']}]

list2 = [
d for d in list1
if any(
'Two' in word
for word in d['codes']
) and all(
'One' not in word
for word in d['codes']
)
]

print(list2)

输出:

[{'id': 22, 'codes': ['FiveTwoSix', 'Four', 'FourFive']}]
<小时/>

如果您不喜欢冗余的遍历列表,您可以使用不同的替代方案。

  1. 对于 python 3.8 或更高版本,您可以执行以下操作:

# Example, given list1:
list1 = [{'id': 11, 'codes': ['OneSeven', 'TwoThree']}, {'id': 22, 'codes': ['FiveTwoSix', 'Four', 'FourFive']}, {'id': 33, 'codes': ['SixSeven', 'OneSix']}]

list2 = [
d for d in list1
if 'Two' in (text := ' '.join(d['codes'])) and 'One' not in text
]

print(list2)
  • 当然,使用 for 语句而不是理解式,您可以在 3.7 或更早版本中执行此操作。
  • list2 = []
    for d in list1:
    text = ' '.join(d['codes'])
    if 'Two' in text and 'One' not in text:
    list2.append(d)
  • 或者使用函数+推导式:
  • def check_condition(data: dict) -> bool:
    text = ' '.join(data['codes'])
    return'Two' in text and 'One' not in text

    list2 = [
    d for d in list1 if check_condition(d)
    ]

    最后一个很有可读性,但有人可能不喜欢声明只在一个地方使用的函数。
    选择适合您情况的方法。

    关于Python检查字典中的列表是否满足两个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60576321/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com