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

时间:2020-06-10 11:58:28

标签: python list-comprehension

所有人!
我有这本字典,其中包含文件名作为键一些数据作为值
在文件名中,有一个浮点数,它表示对该数据进行的测试是对某个字段的正值还是负值。
我想将此字典分为两个列表,例如:肯定和否定。这两个列表对应于包含正负文件名的浮点值
以下代码根据浮点数分隔了值。但是返回3D列表。
问题在这种情况下,如何使用列表理解来生成二维列表?

 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]]]

所需退货

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]]

2 个答案:

答案 0 :(得分:1)

使用list.extend

例如:

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]]

答案 1 :(得分:1)

您想要的回报示例不是2D列表,而是两个单独的列表。 为了获得像[[4, 4, 4], [4, 4, 4], [2, 2, 2], [2, 2, 2]]这样的2D列表,您可以将positive.append(item[k])替换为positive += v,并对negative做同样的事情。

另外,从您提供的示例来看,具有正浮点数的文件名不包含-,而具有负浮点数的文件名不包含positive = [] negative = [] for item in mainDictlist: for k, v in item.items(): if "-" in k: negative += v else: positive += v 。因此,可以通过以下方式完成值的分离:

scrollToColumn

希望这会有所帮助。