字典理解和条件问题
Trouble with dictionary comprehension and conditions
我有一个结构如下的字典:
{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
非常感谢任何帮助!
您的代码中有几处需要更改:
- 使用
isinstance(value, type)
测试你的值的类型
- 你的字典值是列表,你必须迭代并调用
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
。
我有一个结构如下的字典: {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
非常感谢任何帮助!
您的代码中有几处需要更改:
- 使用
isinstance(value, type)
测试你的值的类型 - 你的字典值是列表,你必须迭代并调用
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
。