Python 在列表中添加数字并将其转换为字典
我相信这一定很简单,但我是一个python noob,所以我需要一些帮助。 我的列表如下所示:Python 在列表中添加数字并将其转换为字典,python,Python,我相信这一定很简单,但我是一个python noob,所以我需要一些帮助。 我的列表如下所示: foo = [['0.125', '0', 'able'], ['', '0.75', 'unable'], ['0', '0', 'dorsal'], ['0', '0', 'ventral'], ['0', '0', 'acroscopic']] 请注意,每个单词都有一个或两个数字。我想从数字1中减去数字2,然后得到一本字典,即:单词,数字。 Foo看起来像这样: foo = {'able','
foo = [['0.125', '0', 'able'], ['', '0.75', 'unable'], ['0', '0', 'dorsal'], ['0', '0', 'ventral'], ['0', '0', 'acroscopic']]
请注意,每个单词都有一个或两个数字。我想从数字1中减去数字2,然后得到一本字典,即:单词,数字。
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。添加一个条件以验证字符串是否为空,如“”所示,并将其转换为0
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}
“”
无法转换为字符串
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}
float(“”)
不起作用。假设您希望0
在这种情况下,我建议使用一个helper函数:
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+中的dict理解:
res = {c: safefloat(a) - safefloat(b) for a, b, c in foo}
float(“”)
不起作用。假设您希望0
在这种情况下,我建议使用一个helper函数:
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+中的dict理解:
res = {c: safefloat(a) - safefloat(b) for a, b, c in foo}
这是因为在某些情况下,它们的字符串是空字符串 你可以写
d = float(a or '0') - float(b or '0')
这是因为在某些情况下,它们的字符串是空字符串 你可以写
d = float(a or '0') - float(b or '0')
这是从条目
[''0.75','unable']
中获得的。尝试float(a或0)
将空字符串视为0在您的示例中,结果foo
实际上似乎是一个集合元组,而不是一个字典。字典是{key:value,key2:value}
而不是{key,value},{key2,value2}
,它来自条目[''0.75','unable']
。尝试float(a或0)
将空字符串视为0在您的示例中,结果foo
实际上似乎是一个集合元组,而不是一个字典。字典是{key:value,key2:value}
而不是{key,value},{key2,value2}
这似乎工作得很好,只是当我尝试在for循环之外使用bar时,它给了我一个“ValueError:需要超过1个值才能解包”错误,有什么想法吗?你是如何使用bar的?字典应该这样使用:var=dictionary[key]
和dictionary[key]=value
或者如果您想使用map
,dict(map(lambda x:(x[2],float(x[1]或0)-float(x[0]或0),foo))
。在下一步中,我想输入一个字符串,并在条中逐字查找它,如果它在那里,bar的值需要添加到一个大计数器中。这似乎工作得很好,只有当我尝试在for循环之外使用bar时,它才会给我一个“ValueError:需要超过1个值才能解包”错误,有什么想法吗?你如何使用bar?字典应该这样使用:var=dictionary[key]
和dictionary[key]=value
或者如果您想使用map
,dict(map(lambda x:(x[2],float(x[1]或0)-float(x[0]或0),foo))
。下一步,我想输入一个字符串,在bar中逐字查找,如果它在那里,bar的值需要添加到一个大计数器中。