[英]Taking identical 1st element of a list and assigning it as 1st element of the list in python
我正在尝试采用相同的列表的第一元素,并将其分配为列表的第一元素。 有人告诉我可以通过使用来自collections模块的defaultdict来完成,但是有一种方法可以不使用Collections库来做到这一点。
我有的:
mapping = [['Tom', 'BTPS 1.500 625', 0.702604], ['Tom', 'BTPS 2.000 1225', 0.724939], ['Max', 'OBL 0.0 421', 0.766102], ['Max', 'DBR 3.250 721', 0.887863]]
我要做什么:
mapping = [['Tom',[ 'BTPS 1.500 625', 0.702604], [ 'BTPS 2.000 1225', 0.724939]],['Max',[ 'OBL 0.0 421', 0.766102],['DBR 3.250 721', 0.887863]]]
您应该使用dict / defaultdict按名称对数据进行分组,使用键的第一个元素作为名称,将其余数据切片,并将其附加为值:
from collections import defaultdict
d = defaultdict(list)
for sub in mapping:
d[sub[0]].append(sub[1:])
print(d)
这会给你:
defaultdict(<type 'list'>, {'Max': [['OBL 0.0 421', 0.766102], ['DBR 3.250 721', 0.887863]], 'Tom': [['BTPS 1.500 625', 0.702604], ['BTPS 2.000 1225', 0.724939]]})
或者,如果订单很重要,请使用OrderedDict :
from collections import OrderedDict
d = OrderedDict()
for sub in mapping:
d.setdefault(sub[0],[]).append(sub[1:])
那给你:
OrderedDict([('Tom', [['BTPS 1.500 625', 0.702604], ['BTPS 2.000 1225', 0.724939]]), ('Max', [['OBL 0.0 421', 0.766102], ['DBR 3.250 721', 0.887863]])])
没有任何导入,只需使用dict.setdefault再次使用常规dict:
d = {}
for sub in mapping:
d.setdefault(sub[0],[]).append(sub[1:])
print(d)
使用setdefault时,如果键不在dict中,则会添加一个列表作为值,如果它存在,则仅附加值。
您可以在映射中遍历名称,然后将其添加到字典中。
mapping = [['Tom', 'BTPS 1.500 625', 0.702604], ['Tom', 'BTPS 2.000 1225', 0.724939], ['Max', 'OBL 0.0 421', 0.766102], ['Max', 'DBR 3.250 721', 0.887863]]
#using dictionary to store output
mapping_dict=dict()
for items in mapping:
if items[0] in mapping_dict:
mapping_dict[items[0]].append([items[1],items[2]])
else:
mapping_dict[items[0]]=[items[1],items[2]]
print mapping_dict
Output: {'Max': ['OBL 0.0 421', 0.766102, ['DBR 3.250 721', 0.887863]], 'Tom': ['BTPS 1.500 625', 0.702604, ['BTPS 2.000 1225', 0.724939]]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.