为了账号安全,请及时绑定邮箱和手机立即绑定

从列表创建字典

从列表创建字典

慕尼黑的夜晚无繁华 2021-03-08 08:09:28
从此元组列表中:[('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100'), \('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')] 我想创建一个字典,它将是每三个元组的键[0]和[1]值。因此,所创建的dict的第一个键应为,第二个键'IND, MIA''LAA, SUN'最终结果应为:{'IND, MIA': [('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100')],\'LAA, SUN': [('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')]}如果这有任何关系,则一旦有问题的值成为键,就可以将它们从元组中删除,因为从那以后我就不再需要它们了。任何建议,不胜感激!
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

inp = [('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100'), \

       ('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')]


result = {}

for i in range(0, len(inp), 3):

    item = inp[i]

    result[item[0]+","+item[1]] = inp[i:i+3]


print (result)

Dict理解解决方案是可能的,但有些混乱。


要从阵列中删除键,请用替换第二条循环线(result[item[0]+ ...)


result[item[0]+","+item[1]] = [item[2:]]+inp[i+1:i+3]

Dict理解解决方案(比我最初想象的要少一些混乱:)


rslt = {

    inp[i][0]+", "+inp[i][1]: inp[i:i+3]

    for i in range(0, len(inp), 3)

}


查看完整回答
反对 回复 2021-03-29
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

使用itertools grouper配方:


from itertools import izip_longest


def grouper(iterable, n, fillvalue=None):

    "Collect data into fixed-length chunks or blocks"

    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx

    args = [iter(iterable)] * n

    return izip_longest(fillvalue=fillvalue, *args)


{', '.join(g[0][:2]): g for g in grouper(inputlist, 3)}

应该做。


该grouper()方法一次给我们一组3个元组。


也从字典值中删除键值:


{', '.join(g[0][:2]): (g[0][2:],) + g[1:]  for g in grouper(inputlist, 3)}

您输入的演示:


>>> from pprint import pprint

>>> pprint({', '.join(g[0][:2]): g for g in grouper(inputlist, 3)})

{'IND, MIA': (('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100')),

 'LAA, SUN': (('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN'))}

>>> pprint({', '.join(g[0][:2]): (g[0][2:],) + g[1:]  for g in grouper(inputlist, 3)})

{'IND, MIA': (('05/30',), ('ND', '07/30'), ('UNA', 'ONA', '100')),

 'LAA, SUN': (('05/30',), ('AA', 'SN', '07/29'), ('UAA', 'AAN'))}


查看完整回答
反对 回复 2021-03-29
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

from collections import defaultdict

def solve(lis, skip = 0):

    dic = defaultdict(list)

    it = iter(lis)                    # create an iterator

    for elem in it:

        key = ", ".join(elem[:2])     # create key

        dic[key].append(elem)

        for elem in xrange(skip):     # append the next two items to the 

            dic[key].append(next(it)) # dic as skip =2 

    print dic



solve([('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100'), \

('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')], skip = 2)

输出:


defaultdict(<type 'list'>,

 {'LAA, SUN': [('LAA', 'SUN', '05/30'), ('AA', 'SN', '07/29'), ('UAA', 'AAN')],

 'IND, MIA': [('IND', 'MIA', '05/30'), ('ND', '07/30'), ('UNA', 'ONA', '100')]

 })


查看完整回答
反对 回复 2021-03-29
  • 3 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信