【问题标题】:Filter a dictionary using one of multiple keys [duplicate]使用多个键之一过滤字典[重复]
【发布时间】:2018-03-19 21:55:53
【问题描述】:

我是 Pyhton 的新手,想用由两个值组成的键来过滤字典。这是我的字典:

{(0, 'DRYER'): [103.0, 131.0, 9.0, 1.24],
 (2, 'DRYER'): [106.0, 120.0, 5.0, 1.24],
 (2, 'WASHING'): [70.0, 90.0, 11.0, 0.19]}

键由两个值(n,a) 组成,我想在n=2 的位置创建一个新字典,结果是:

{(2, 'DRYER'): [106.0, 120.0, 5.0, 1.24],
 (2, 'WASHING'): [70.0, 90.0, 11.0, 0.19]}

如果有人可以提供帮助,我将不胜感激!

【问题讨论】:

  • {k:v for k,v in d.items() if k[0]==2} 可以解决问题。

标签: python dictionary filter


【解决方案1】:

使用dict理解检查元组键的第一个值是否为2:

{k: v for k, v in dct.items() if k[0]==2}

所以:

In [11]: dct = {(0, 'DRYER'): [103.0, 131.0, 9.0, 1.24],
    ...:  (2, 'DRYER'): [106.0, 120.0, 5.0, 1.24],
    ...:  (2, 'WASHING'): [70.0, 90.0, 11.0, 0.19]}
    ...:  

In [12]: {k: v for k, v in dct.items() if k[0]==2}
Out[12]: 
{(2, 'DRYER'): [106.0, 120.0, 5.0, 1.24],
 (2, 'WASHING'): [70.0, 90.0, 11.0, 0.19]}

【讨论】:

    【解决方案2】:

    尝试使用filter

    new_dict = dict(filter(function(), old_dict.items()))
    

    在您的情况下,function() 将是

    lambda it: True if it[0][0] == 2 else False
    

    基本上filter() 抓取一个函数和一个可迭代对象,如果函数返回 False,则从可迭代对象中删除所有元素

    【讨论】:

      猜你喜欢
      • 2014-04-05
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      相关资源
      最近更新 更多