繁体   English   中英

在列表中获取相同的第一个元素并将其分配为python中列表的第一个元素

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM