【发布时间】:2019-05-03 17:11:09
【问题描述】:
我有一本包含浮点数和整数值的字典,我正在尝试使用 dict 理解对两者进行编码。如何合并 isinstance(attempts.params[i], float) 和 isinstance(attempts.params[i], int) 以便获得正确的值?
attempts.params 是一个列表:
[name: "p1"
float_value: 0.93712629656
, name: "p2"
int_value: 7
, name: "p3"
float_value: 0.293585904040
, name: "p4"
int_value: 6
, name: "p5"
int_value: 7]
{attempts.params[i].name.encode('ascii','ignore'):attempts.params[i].float_value for i in range(len(attempts.params))}
输出:
{'p1': 0.93712629656,
'p2': 0.0,
'p3': 0.293585904040,
'p4': 0.0,
'p5': 0.0}
如您所见,p2、p4 和 p5 是 int 值,因此它们无法正确输出。
我试过了:
{attempts.params[i].name.encode('ascii','ignore'):attempts.params[i].float_value for i in range(len(attempts.params)) if isinstance(attempts.params[i], float)}
但得到了一个空字典{}
期望的输出:
{'p1': 0.93712629656,
'p2': 7,
'p3': 0.293585904040,
'p4': 10,
'p5': 5}
【问题讨论】:
-
输出很好,但输入在哪里?
-
究竟是什么是
attempts.params[i]?如果它具有int_value和/或float_value属性,则它不是int或float。 -
模 1 检查怎么样?
if x % 1 == 0表示您有一个int。 -
可能类似于
{x.name.encode('ascii', 'ignore'): x.float_value if hasattr(x, 'float_value') else x.int_value for x in attempts.params}。 -
您的“列表”不是有效的 Python 表达式。
标签: python dictionary dictionary-comprehension