繁体   English   中英

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

[英]Creation of lists depending on key values of a Python dictionary

每个人!
我有这本字典,其中包含文件名作为键一些数据作为值
在文件名中有一些浮点数,表示对该数据进行的测试是对某个字段的正数还是负数。
我想把这本字典分成两个列表,例如:正面和负面。 这两个列表对应包含正负的文件名的浮点值
以下代码根据浮点数分隔值。 但返回 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]]

使用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)

Output:

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

您希望返回的示例不是二维列表,而是两个单独的列表。 为了获得像[[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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM