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

问题描述 投票:1回答:1

大家好!我有这本字典 我有这本字典,里面有 档名一些数据作为值. 在文件名中,有一些浮动数,这表明,如果对这些数据做的测试是在正或负的一些字段。 我想把这个字典分成两个列表,例如:正数和负数。这两个列表对应于包含正数和负数的文件名的浮点数下面的代码根据浮点数将这些值分开。但返回的是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]]]

期望回报

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]]
python list-comprehension
1个回答
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
投票

你的例子中的期望返回不是一个2D列表,而是两个独立的列表。 为了得到一个2D列表,比如 [[4, 4, 4], [4, 4, 4], [2, 2, 2], [2, 2, 2]] 你可以替换 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

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.