我确信这一定很简单,但我是一个蟒蛇菜鸟,所以我需要一些帮助。 我有一个列表,看起来如下:
foo = [['0.125', '0', 'able'], ['', '0.75', 'unable'], ['0', '0', 'dorsal'], ['0', '0', 'ventral'], ['0', '0', 'acroscopic']]
请注意,每个单词都有1或2个数字。我想从数字1中减去数字2,然后使用字典,即:word,number。 那么Foo看起来像这样:
foo = {'able','0.125'},{'unable', '-0.75'}...
它尝试过:
bar=[]
for a,b,c in foo:
d=float(a)-float(b)
bar.append((c,d))
但是我得到了错误:
ValueError: could not convert string to float:
答案 0 :(得分:3)
''
无法转换为字符串。
bar = []
for a,b,c in foo:
d = float(a or 0) - float(b or 0)
bar.append((c,d))
然而,这不会成为字典。为此你想要:
bar = {}
for a,b,c in foo:
d = float(a or 0)-float(b or 0)
bar[c] = d
使用字典理解的简短方法:
bar = {sublist[2]: float(sublist[0] or 0) - float(sublist[1] or 0) for sublist in foo}
答案 1 :(得分:0)
添加条件以验证字符串是否为空,并将其转换为0
答案 2 :(得分:0)
float('')
不起作用。假设在这种情况下您需要0
,我建议使用辅助函数:
def safefloat(s):
if not s:
return 0.0
return float(s)
res = {}
for a, b, c in foo:
res[c] = safefloat(a) - safefloat(b)
请注意,您可以通过理解将字典放在一行中:
res = dict((c, safefloat(a) - safefloat(b)) for a, b, c in foo)
或Python 2.7 +中的字典理解:
res = {c: safefloat(a) - safefloat(b) for a, b, c in foo}
答案 3 :(得分:0)
d = float(a or '0') - float(b or '0')
答案 4 :(得分:0)
>>> foo = [['0.125', '0', 'able'], ['', '0.75', 'unable'],
['0', '0', 'dorsal'], ['0', '0', 'ventral'],
['0', '0', 'acroscopic']]
>>> dict((i[2], float(i[0] or 0) - float(i[1])) for i in foo)
{'acroscopic': 0.0, 'ventral': 0.0, 'unable': -0.75, 'able': 0.125,
'dorsal': 0.0}