筛选,返回输入列表中包含指定键:值对的所有词典的列表

2024-10-02 02:32:05 发布

您现在位置:Python中文网/ 问答频道 /正文

过滤器 用三个参数定义一个名为filterIn的函数。传递给函数的第一个参数应该是字典列表(数据),第二个参数是字符串(字典键),第三个参数是另一个字符串(字典值)。此函数必须返回输入列表中包含所示内容的所有词典的列表关键:价值配对。你知道吗

我该如何着手解决这个问题? 这就是我目前所拥有的。你知道吗

def filterIn (data, key , x):
  result = []
  for i in data:
    if i == (key, x):
  return (result.append(key, x))

Tags: 数据key函数字符串过滤器内容列表data
2条回答

尝试以下操作:

def filterIn (data, key , x):
  result = []
  for dictionary in data:
    if dictionary.get(key) == x:
        result.append(dictionary)
  return result

data = [{1:2, 2:2}, {2:2}, {3:1}]
result = filterIn(data, 2, 2)
print(result)

out: [{1: 2, 2: 2}, {2: 2}]

“for i in data”将在变量“i”中返回字典,而不是键值对,因此必须检查字典中是否存在键值对。您可以通过调用'get'方法来实现这一点,如果字典中不存在键,该方法将返回None。然后必须将整个字典附加到结果中,而不仅仅是键值对。你知道吗

希望这有帮助

这里有几个问题:

  1. 在执行for i in data时,因为data是词典列表,所以i现在是词典。所以,你的台词i == (key, x)没有意义。它应该看起来像: (key, x) in i.items(),或与i.get(key) == x一起使用get方法。

  2. 您希望返回具有此对的词典列表,因此您希望在result列表中附加i。所以你的行result.append(key, x)应该是result.append(i)

  3. 这里的append缩进是错误的。如果if子句是True

所以,它应该看起来像:

def filterIn(data, key, x):
    result = []
    for i in data:
        if i.get(key) == x:
            result.append(i)
    return i

可简称为:

def filterIn(data, key, x):
    return [i for i in data if i.get(key) == x]

相关问题 更多 >

    热门问题