【问题标题】:Filter dict in a list with the same value [duplicate]在具有相同值的列表中过滤 dict [重复]
【发布时间】:2020-07-16 07:32:17
【问题描述】:

我想过滤包含 'hometown':'NY' 的字典

[{'name': 'paul', 'age': '26', 'hometown': '98_street_AU', 'gender': 'male'},
{'name': 'mei', 'age': '27', 'hometown': '19_street_NY', 'gender': 'female'},
{'name': 'smith', 'age': '14', 'hometown': '7_street_NY', 'gender': 'male'},
{'name': 'raj', 'age': '13', 'hometown': '56_street_IND', 'gender': 'male'},.....]

这是我过滤字典和输出的代码

a=[]
for test in result:
   x={}
   for key,value in test.items():
        if key == 'hometown':
            if 'NY' in value:
                x[key] = value
   a.append(x)
print(a)


[{}, {'hometown': '19_street_NY'}, {'hometown': '7_street_NY'}, {}]

我想要的输出是

[{'name': 'mei', 'age': '27', 'hometown': '19_street_NY', 'gender': 'female'},
{'name': 'smith', 'age': '14', 'hometown': '7_street_NY', 'gender': 'male'}]

【问题讨论】:

标签: python


【解决方案1】:

试试这个简单的方法:

a=[]
for i in result:
    if i['hometown'].__contains__("NY"):
        a.append(i)
print(a)

【讨论】:

  • 我喜欢你的方法,因为它更简单。但是,如果我想过滤不包含 NY 的 dict 怎么办?但我不想使用 if/else。 python有没有像__contain__这样的特殊语法?
  • 所以基本上我的 if 条件所做的是,它返回给定条件的真/假。检查条件是否为假并执行应该可以完成工作。像这样:如果 i['hometown'].__contains__("NY") == False:如果您喜欢我的答案,请点赞并将其标记为经过验证的答案。谢谢!!
【解决方案2】:

使用str.endswith 的列表推导

例如:

a = [test for test in result if test.get('hometown', "").endswith('NY')] 

【讨论】:

    【解决方案3】:

    您只添加项目hometown 而不是字典。这应该有效:

    a=[]
    for test in result:
       x={}
       for key,value in test.items():
            if key == 'hometown':
                if 'NY' in value:
                    a.append(test)
    print(a)
    

    【讨论】:

      【解决方案4】:
      In [6]: a = [{'name': 'paul', 'age': '26', 'hometown': '98_street_AU', 'gender': 'male'},
         ...: {'name': 'mei', 'age': '27', 'hometown': '19_street_NY', 'gender': 'female'},
         ...: {'name': 'smith', 'age': '14', 'hometown': '7_street_NY', 'gender': 'male'},
         ...: {'name': 'raj', 'age': '13', 'hometown': '56_street_IND', 'gender': 'male'}]
      
      In [7]: [i for i in a if "hometown" in i and i["hometown"].endswith("NY")]
      Out[7]:
      [{'name': 'mei', 'age': '27', 'hometown': '19_street_NY', 'gender': 'female'},
       {'name': 'smith', 'age': '14', 'hometown': '7_street_NY', 'gender': 'male'}]
      

      【讨论】:

        猜你喜欢
        • 2015-07-06
        • 1970-01-01
        • 2020-03-14
        • 1970-01-01
        • 2021-10-04
        • 1970-01-01
        • 2017-04-23
        • 2022-01-07
        相关资源
        最近更新 更多