从 python 中的列表创建嵌套列表
Create nested list from list in python
需要从 python
中的列表中获取嵌套列表
list_values=[('BNB', '161221'),
('BNB', '171221'),
('BNB', '241221'),
('BNB', '280122'),
('BNB', '311221'),
('BTC', '161221'),
('BTC', '171221'),
('BTC', '241221'),
('BTC', '250222'),
('BTC', '250322'),
('BTC', '280122'),
('BTC', '311221')]
所需列表的输出是
List_op=[[('BNB', '161221'),
('BNB', '171221'),
('BNB', '241221'),
('BNB', '280122'),
('BNB', '311221')],
[('BTC', '161221'),
('BTC', '171221'),
('BTC', '241221'),
('BTC', '250222'),
('BTC', '250322'),
('BTC', '280122'),
('BTC', '311221')]]
我尝试了一些列表理解方法,但无法得到这个。感谢帮助。
这不是最优雅的方式,但您可以使用 for each 循环迭代起始列表并构建 2D 输出:
list_values=[('BNB', '161221'),
('BNB', '171221'),
('BNB', '241221'),
('BNB', '280122'),
('BNB', '311221'),
('BTC', '161221'),
('BTC', '171221'),
('BTC', '241221'),
('BTC', '250222'),
('BTC', '250322'),
('BTC', '280122'),
('BTC', '311221')]
key = ''
List_op = []
for lv in list_values:
if lv[0] != key: # new key encountered
if key != '':
List_op.append(op) # add previous 1D list to 2D output
key = lv[0] # assign new key value
op = [] # reinitialize 1D list
op.append(lv) # append current tuple to 1D list
List_op.append(op) # add final 1D list to 2D
print(List_op)
这会打印:
[[('BNB', '161221'), ('BNB', '171221'), ('BNB', '241221'),
('BNB', '280122'), ('BNB', '311221')],
[('BTC', '161221'), ('BTC', '171221'), ('BTC', '241221'),
('BTC', '250222'), ('BTC', '250322'), ('BTC', '280122'),
('BTC', '311221')]]
一个简单的解决方案:
from collections import defaultdict
list_values = [
('BNB', '161221'),
('BNB', '171221'),
('BNB', '241221'),
('BNB', '280122'),
('BNB', '311221'),
('BTC', '161221'),
('BTC', '171221'),
('BTC', '241221'),
('BTC', '250222'),
('BTC', '250322'),
('BTC', '280122'),
('BTC', '311221')
]
# a dict might be a better data type here
result = defaultdict(list)
for k, v in list_values:
result[k].append(v)
print(result)
# but if you need a list of lists instead of a dictionary:
result = defaultdict(list)
for k, v in list_values:
result[k].append((k, v))
list_op = [*result.values()]
print(list_op)
输出:
defaultdict(<class 'list'>, {'BNB': ['161221', '171221', '241221', '280122', '311221'], 'BTC': ['161221', '171221', '241221', '250222', '250322', '280122', '311221']})
[[('BNB', '161221'), ('BNB', '171221'), ('BNB', '241221'), ('BNB', '280122'), ('BNB', '311221')], [('BTC', '161221'), ('BTC', '171221'), ('BTC', '241221'), ('BTC', '250222'), ('BTC', '250322'), ('BTC', '280122'), ('BTC', '311221')]]
需要从 python
中的列表中获取嵌套列表list_values=[('BNB', '161221'),
('BNB', '171221'),
('BNB', '241221'),
('BNB', '280122'),
('BNB', '311221'),
('BTC', '161221'),
('BTC', '171221'),
('BTC', '241221'),
('BTC', '250222'),
('BTC', '250322'),
('BTC', '280122'),
('BTC', '311221')]
所需列表的输出是
List_op=[[('BNB', '161221'),
('BNB', '171221'),
('BNB', '241221'),
('BNB', '280122'),
('BNB', '311221')],
[('BTC', '161221'),
('BTC', '171221'),
('BTC', '241221'),
('BTC', '250222'),
('BTC', '250322'),
('BTC', '280122'),
('BTC', '311221')]]
我尝试了一些列表理解方法,但无法得到这个。感谢帮助。
这不是最优雅的方式,但您可以使用 for each 循环迭代起始列表并构建 2D 输出:
list_values=[('BNB', '161221'),
('BNB', '171221'),
('BNB', '241221'),
('BNB', '280122'),
('BNB', '311221'),
('BTC', '161221'),
('BTC', '171221'),
('BTC', '241221'),
('BTC', '250222'),
('BTC', '250322'),
('BTC', '280122'),
('BTC', '311221')]
key = ''
List_op = []
for lv in list_values:
if lv[0] != key: # new key encountered
if key != '':
List_op.append(op) # add previous 1D list to 2D output
key = lv[0] # assign new key value
op = [] # reinitialize 1D list
op.append(lv) # append current tuple to 1D list
List_op.append(op) # add final 1D list to 2D
print(List_op)
这会打印:
[[('BNB', '161221'), ('BNB', '171221'), ('BNB', '241221'),
('BNB', '280122'), ('BNB', '311221')],
[('BTC', '161221'), ('BTC', '171221'), ('BTC', '241221'),
('BTC', '250222'), ('BTC', '250322'), ('BTC', '280122'),
('BTC', '311221')]]
一个简单的解决方案:
from collections import defaultdict
list_values = [
('BNB', '161221'),
('BNB', '171221'),
('BNB', '241221'),
('BNB', '280122'),
('BNB', '311221'),
('BTC', '161221'),
('BTC', '171221'),
('BTC', '241221'),
('BTC', '250222'),
('BTC', '250322'),
('BTC', '280122'),
('BTC', '311221')
]
# a dict might be a better data type here
result = defaultdict(list)
for k, v in list_values:
result[k].append(v)
print(result)
# but if you need a list of lists instead of a dictionary:
result = defaultdict(list)
for k, v in list_values:
result[k].append((k, v))
list_op = [*result.values()]
print(list_op)
输出:
defaultdict(<class 'list'>, {'BNB': ['161221', '171221', '241221', '280122', '311221'], 'BTC': ['161221', '171221', '241221', '250222', '250322', '280122', '311221']})
[[('BNB', '161221'), ('BNB', '171221'), ('BNB', '241221'), ('BNB', '280122'), ('BNB', '311221')], [('BTC', '161221'), ('BTC', '171221'), ('BTC', '241221'), ('BTC', '250222'), ('BTC', '250322'), ('BTC', '280122'), ('BTC', '311221')]]