根据Python字典的键值创建列表
各位!根据Python字典的键值创建列表,python,list-comprehension,Python,List Comprehension,各位! 我有一本字典,其中包含文件名作为键,一些数据作为值。 在文件名中有一个浮点数,表示对该数据进行的测试是在某个字段的正数还是负数上进行的。 我想把这本词典分成两个单子,例如:正片和负片。这两个列表对应于包含正数和负数的文件名的浮点值 下面的代码根据浮点数分隔了这些值。但返回3D列表。 问题在这种情况下,如何使用列表理解获得2D列表? mainDictlist = [{'A1_0.5.txt':[[4,4,4],[4,4,4]],'B1_-0.5.txt':[[1,2,3],[1,2,3]
我有一本字典,其中包含文件名作为键,一些数据作为值。
在文件名中有一个浮点数,表示对该数据进行的测试是在某个字段的正数还是负数上进行的。
我想把这本词典分成两个单子,例如:正片和负片。这两个列表对应于包含正数和负数的文件名的浮点值
下面的代码根据浮点数分隔了这些值。但返回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]]
使用
列表。扩展
Ex:
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]]
您想要返回的示例不是2D列表,而是两个单独的列表。
为了获得像[[4,4,4],[4,4,4],[2,2,2],[2,2,2]]
这样的2D列表,您可以替换正片。用正片+=v
追加(项[k])
,并对负片执行同样的操作
另外,根据您提供的示例判断,带正浮点数的文件名不包含-
,而带负浮点数的文件名则不包含。因此,可以通过以下方式分离值:
positive = []
negative = []
for item in mainDictlist:
for k, v in item.items():
if "-" in k:
negative += v
else:
positive += v
希望这能有所帮助。Hi Ivan,我不确定是否可以使用+=操作将其附加到列表中。事实上,您是。好吧,这就是我使用您的想法得到的错误。
ValueError Traceback(最近一次调用)在8 negative1+=v9 else:-->10 positive1+=v11值错误:操作数无法与形状(0,)(2,3)Hm一起广播,这很奇怪。你在使用纯python吗?你能给出一段完整的代码吗?我正在使用Jupyter笔记本和Python 3,它和使用Python有什么区别吗??
positive = []
negative = []
for item in mainDictlist:
for k, v in item.items():
if "-" in k:
negative += v
else:
positive += v