所有人!
我有这本字典,其中包含文件名作为键和一些数据作为值。
在文件名中,有一个浮点数,它表示对该数据进行的测试是对某个字段的正值还是负值。
我想将此字典分为两个列表,例如:肯定和否定。这两个列表对应于包含正负文件名的浮点值
以下代码根据浮点数分隔了值。但是返回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]]
答案 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
希望这会有所帮助。