【问题标题】:Can we filter dictionary based on 'id' in python?我们可以根据python中的'id'过滤字典吗?
【发布时间】:2020-04-18 23:43:18
【问题描述】:

我想问一下我们是否可以过滤仅在python中包含某些单词的id。 我有这两个 json 文件。我想过滤 id 只包含'def###'?

a= [{'id':'abc23','name':'aa','age':'22',
     'data':{'read':'','speak':''},
     'responses':{'a':1,'b':2}},
     {'id':'abc25','name':'bb','age':'32',
      'data':{'read':'','speak':''},
      'responses':{'a':1,'b':2}},
    {'id':'abc60','name':'cc','age':'24',
     'data':{'read':'','speak':''},
     'responses':{'a':1,'b':2}},
    {'id':'def23','name':'aa','age':'22',
     'data':{'read':'','speak':''},
     'responses':{'a':1,'b':2}},
     {'id':'def25','name':'bb','age':'32',
      'data':{'read':'','speak':''},
      'responses':{'a':1,'b':2}},
    {'id':'def60','name':'cc','age':'24',
     'data':{'read':'','speak':''},
     'responses':{'a':1,'b':2}}]

输出应该是: 只有 ID 'def' 才会存在。

[{'id':'def23','name':'aa','age':'22',
'data':{'read':'','speak':''},
'responses':{'a':1,'b':2}},
{'id':'def25','name':'bb','age':'32',
'data':{'read':'','speak':''},
'responses':{'a':1,'b':2}},
{'id':'def60','name':'cc','age':'24',
'data':{'read':'','speak':''},
'responses':{'a':1,'b':2}}]

【问题讨论】:

  • 你试过了吗?请分享您的代码。
  • 有一个非常相似的question 有几个很好的答案。我认为最适合你的答案是this

标签: python json pandas filter


【解决方案1】:

如果您想检查 id 键是否包含某个词,例如 def 在其值中,您可以简单地执行以下操作:

for dict_row in a:
    if 'def' in dict_row['id']:
        print(dict_row)

输出

{'id': 'def23', 'name': 'aa', 'age': '22', 'data': {'read': '', 'speak': ''}, 'responses': {'a': 1, 'b': 2}}
{'id': 'def25', 'name': 'bb', 'age': '32', 'data': {'read': '', 'speak': ''}, 'responses': {'a': 1, 'b': 2}}
{'id': 'def60', 'name': 'cc', 'age': '24', 'data': {'read': '', 'speak': ''}, 'responses': {'a': 1, 'b': 2}}

您可以使用list comprehension 来列出您返回的词典:

def_list = [dict_row for dict_row in a if 'def' in dict_row['id']]

【讨论】:

    【解决方案2】:

    startswith 使用列表推导:

    a = [x for x in a if x['id'].startswith('def')
    

    或按前 3 个字符过滤:

    a = [x for x in a if x['id'][:3] == 'def']
    

    【讨论】:

      猜你喜欢
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2010-11-15
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      相关资源
      最近更新 更多