[英]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.