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
根据Python字典的键值创建列表_Python_List Comprehension - Fatal编程技术网

根据Python字典的键值创建列表

根据Python字典的键值创建列表,python,list-comprehension,Python,List Comprehension,各位! 我有一本字典,其中包含文件名作为键,一些数据作为值。 在文件名中有一个浮点数,表示对该数据进行的测试是在某个字段的正数还是负数上进行的。 我想把这本词典分成两个单子,例如:正片和负片。这两个列表对应于包含正数和负数的文件名的浮点值 下面的代码根据浮点数分隔了这些值。但返回3D列表。 问题在这种情况下,如何使用列表理解获得2D列表? mainDictlist = [{'A1_0.5.txt':[[4,4,4],[4,4,4]],'B1_-0.5.txt':[[1,2,3],[1,2,3]

各位!
我有一本字典,其中包含文件名作为键,一些数据作为值。
在文件名中有一个浮点数,表示对该数据进行的测试是在某个字段的正数还是负数上进行的。
我想把这本词典分成两个单子,例如:正片和负片。这两个列表对应于包含正数和负数的文件名的浮点值
下面的代码根据浮点数分隔了这些值。但返回3D列表。
问题在这种情况下,如何使用列表理解获得2D列表?

 mainDictlist = [{'A1_0.5.txt':[[4,4,4],[4,4,4]],'B1_-0.5.txt':[[1,2,3],[1,2,3]],'A2_0.5.txt'[[2,2,2],[2,2,2]],'B2_-0.5.txt':[[1,1,1],[1,1,1]]}]

def findfloat(keys):
    lst_numberStr = re.findall(r'[*+-]?\d+\.\d+', keys)
    v = float(lst_numberStr[0])
return v

positive = []
negative = []
for item in mainDictlist:
    for k, v in item.items():
        findFloat = findfloat(k)
        if findFloat > 0:               
            positive.append(item[k])            
        if findFloat < 0:
           negative.append(item[k])
print('List Pos',positive)
print('List Neg',negative)
期望回报

List Pos [[4, 4, 4], [4, 4, 4]], [[2, 2, 2], [2, 2, 2]]
List Neg [[1, 2, 3], [1, 2, 3]], [[1, 1, 1], [1, 1, 1]]

使用
列表。扩展

Ex:

positive = []
negative = []
for item in mainDictlist:
    for k, v in item.items():
        findFloat = findfloat(k)
        if findFloat > 0:               
            positive.extend(item[k])            
        if findFloat < 0:
            negative.extend(item[k])
print('List Pos',positive)
print('List Neg',negative)
List Pos [[4, 4, 4], [4, 4, 4], [2, 2, 2], [2, 2, 2]]
List Neg [[1, 2, 3], [1, 2, 3], [1, 1, 1], [1, 1, 1]]

您想要返回的示例不是2D列表,而是两个单独的列表。 为了获得像
[[4,4,4],[4,4,4],[2,2,2],[2,2,2]]
这样的2D列表,您可以替换
正片。用
正片+=v
追加(项[k])
,并对
负片执行同样的操作

另外,根据您提供的示例判断,带正浮点数的文件名不包含
-
,而带负浮点数的文件名则不包含。因此,可以通过以下方式分离值:

positive = []
negative = []
for item in mainDictlist:
    for k, v in item.items():
        if "-" in k:
            negative += v
        else:
            positive += v

希望这能有所帮助。

Hi Ivan,我不确定是否可以使用+=操作将其附加到列表中。事实上,您是。好吧,这就是我使用您的想法得到的错误。
ValueError Traceback(最近一次调用)在8 negative1+=v9 else:-->10 positive1+=v11值错误:操作数无法与形状(0,)(2,3)Hm一起广播,这很奇怪。你在使用纯python吗?你能给出一段完整的代码吗?我正在使用Jupyter笔记本和Python 3,它和使用Python有什么区别吗??
positive = []
negative = []
for item in mainDictlist:
    for k, v in item.items():
        if "-" in k:
            negative += v
        else:
            positive += v