【问题标题】:Trouble with dictionary comprehension and conditions字典理解和条件有问题
【发布时间】:2019-11-23 14:33:48
【问题描述】:

我有一本结构如下的字典: {1: ["string1", 10, "string2", 5.0], 2: ["string3", 200, "string4", 7.5]}

我的目标是创建一个函数,它遍历该字典并根据它们是 int 还是 float 覆盖数值。

我想出但很遗憾不起作用的功能是:

def changer(value):
   if value is int:
       value += 1
   elif value is float:
       value *= 2

def change_dict(dict):
   dict = {key: changer(value) for (key, value) in dict.items()}
   return dict

非常感谢任何帮助!

【问题讨论】:

  • “不幸的是不起作用”不是问题陈述
  • value 是值列表,因此您需要遍历列表而不是直接检查 int 或 float。
  • 您还需要使用 type(value) is int 进行严格检查,或者很可能使用 if isinstance(value, int) 进行类型检查 - value is int 永远不会是真的,除非您在某处确实有 value = int 跨度>

标签: python dictionary-comprehension


【解决方案1】:

您的代码中有几处需要更改:

  • 使用isinstance(value, type) 测试您的值的类型
  • 您的 dict 值是列表,您必须对其所有值进行迭代并调用 changer
  • 您应该避免使用dict 或其他内置函数名称作为变量名称。

这是您的代码的工作版本:

data = {1: ["string1", 10, "string2", 5.0], 2: ["string3", 200, "string4", 7.5]}

def changer(value):
    if isinstance(value, int):
        value += 1
    elif isinstance(value, float):
        value *= 2
    return value

def change_dict(d):
    d = {key: [changer(value) for value in sublist] for key, sublist in d.items()}
    return d

print(change_dict(data))
# {1: ['string1', 11, 'string2', 10.0], 2: ['string3', 201, 'string4', 15.0]}

请注意,使用value is int 测试值是否为类型 int 本身,而不是值的类型是否为int

【讨论】:

    猜你喜欢
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2015-09-26
    • 2016-04-21
    相关资源
    最近更新 更多