【问题标题】:Return dictionary keys based on list integer value根据列表整数值返回字典键
【发布时间】:2018-05-11 13:22:14
【问题描述】:

我有以下几点:

my_list = ["7777777", "888888", "99999"]
my_dict = {21058199: '500', 7777777: '500', 21058199: '500'}

我正在尝试创建一个新字典,其中将包含与列表条目匹配的字典值(来自原始字典)与字典键(在原始字典中)

for k in my_dict.keys():
  if k in my_list:
      new_dict.append(k)

print(new_dict)        

应该返回

7777777: '500'

但我返回的是一个空集。我不确定我在这里做错了什么

【问题讨论】:

  • 只需将 k 更改为 str(k) .. 您正在将字符串与整数进行比较 ..
  • 德普。大家好!

标签: python list dictionary


【解决方案1】:

字典理解将为您提供所需的内容。

  • 您需要确保类型一致(intstr
  • 除非列表比字典长得多,否则迭代列表并检查键是否在字典中会比其他方式更有效。

例如:

In []:
new_dict = {k: my_dict[k] for k in map(int, my_list) if k in my_dict}
print(new_dict)

Out[]:
{7777777: '500'}

【讨论】:

    【解决方案2】:

    试试这样:

    my_list = ["7777777", "888888", "99999"]
    my_dict = {21058199: '500', 7777777: '500', 21058199: '500'}
    
    new_dict = {k:my_dict[k] for k in my_dict.keys() if str(k) in my_list}
    print(new_dict)
    
    # {7777777: '500'}
    

    更新:

    您也可以使用 funcy 库中的 project 函数来执行此操作。

    from funcy import project
    
    new_dict = project(my_dict, map(int, my_list))
    print(new_dict)
    

    【讨论】:

    • 只有几点:in 用于列表(O(n))比in 用于字典(或集合)(O(1))要昂贵得多。您不需要调用 .keys() 来迭代 dict 的键 - 这是默认设置,例如for k in my_dict:.
    【解决方案3】:

    你必须int()迭代器。

    my_list = ["7777777", "888888", "99999"]
    my_dict = {21058199: '500', 7777777: '500', 21058199: '500'}
    
    for l_i in my_list:
        if l_i in my_dict:
            print(my_dict[int(l_i)])
    

    【讨论】:

      【解决方案4】:

      您的字典键是“Int”类型,而您的列表项是字符串。您需要将一个转换为另一个。

      例如:

      new_dict = {}
      for k in my_dict.keys():
          if str(k) in my_list:
              new_dict[k] = my_dict[k]
      

      请注意,您不能使用 .append() 将键值对添加到字典中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 2015-05-17
        • 2020-02-06
        • 2019-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多