Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表中添加数字并将其转换为字典_Python - Fatal编程技术网

Python 在列表中添加数字并将其转换为字典

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','

我相信这一定很简单,但我是一个python noob,所以我需要一些帮助。 我的列表如下所示:

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的值需要添加到一个大计数器中。