首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典列表列表到元组列表列表

字典列表列表到元组列表列表
EN

Stack Overflow用户
提问于 2020-12-05 10:01:40
回答 2查看 47关注 0票数 0

在一开始,我有一个字典的字典:

代码语言:javascript
复制
{'count': {'-5': {'R': 279, 'K': 336, 'D': 171, 'E': 246, 'N': 239, 'Q': 371, 'S': 894, 'G': 520, 'H': 122, 'T': 647, 'A': 643, 'P': 712, 'Y': 126, 'V': 444, 'M': 106, 'C': 74, 'L': 473, 'F': 202, 'I': 239, 'W': 35, '!': 15}, '-4': {'R': 270, 'K': 361, 'D': 177, 'E': 265, 'N': 208, 'Q': 361, 'S': 891, 'G': 455, 'H': 131, 'T': 700, 'A': 653, 'P': 699, 'Y': 128, 'V': 455, 'M': 114, 'C': 37, 'L': 495, 'F': 215, 'I': 235, 'W': 34, '!': 10} } }

使用列表理解:

代码语言:javascript
复制
dictionary_count =  [value for value in dictionary_count.values()]
dictionary_count =  [list(col) for col in zip(*[d.values() for d in dictionary_count])]

我得到了:

代码语言:javascript
复制
[[{'R': 279, 'K': 336, 'D': 171, 'E': 246, 'N': 239, 'Q': 371, 'S': 894, 'G': 520, 'H': 122, 'T': 647, 'A': 643, 'P': 712, 'Y': 126, 'V': 444, 'M': 106, 'C': 74, 'L': 473, 'F': 202, 'I': 239, 'W': 35, '!': 15}, '-4': {'R': 270, 'K': 361, 'D': 177, 'E': 265, 'N': 208, 'Q': 361, 'S': 891, 'G': 455, 'H': 131, 'T': 700, 'A': 653, 'P': 699, 'Y': 128, 'V': 455, 'M': 114, 'C': 37, 'L': 495, 'F': 215, 'I': 235, 'W': 34, '!': 10}]]

但现在我被卡住了,我想:

代码语言:javascript
复制
[[('R', 279),('K', 336),('D', 171),('E', 246),('N', 239),('Q', 371),('S', 894),('G', 520),('H', 122),('T', 647),('A', 643),('P', 712),('Y', 126),('V', 444),('M', 106),('C', 74),('L', 473),('F', 202),('I', 239),('W', 35),('!', 15})],[('R', 270),('K', 361),('D', 177),('E', 265),('N', 208),('Q', 361),('S', 891),('G', 455),('H', 131),('T', 700),('A', 653),('P', 699),('Y', 128),('V', 455),('M', 114),('C', 37),('L', 495),('F', 215),('I', 235),('W', 34),('!', 10}]]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-05 10:34:50

我有一个解决方案,如下所示。

代码语言:javascript
复制
a = {'count': {'-5': {'R': 279, 'K': 336}}}
result = [[list(col.items()) for col in val.values()] for val in a.values()]
>>> [[[('R', 279), ('K', 336)]]]

因为你的输入是3层字典,所以带有列表理解的输出应该是3维的,比如[[[('R', 279)]]]。如果你想要像[[('R', 279)]]这样的二维输出,我建议你使用嵌套循环,这样你就可以更自由地定制输出,如下所示。

代码语言:javascript
复制
result = []
for key, val in a.items():
    # val = {'-5': {'R': 279, 'K': 336}}
    temp = []
    for aKey, aVal in val.items():
        # aVal = {'R': 279, 'K': 336}
        for item in aVal.items():
             temp.append(tuple(item))
        result.append(temp)
print(result)
>>> [[('R', 279),('K', 336)]]
票数 3
EN

Stack Overflow用户

发布于 2020-12-05 10:54:32

我给你两种方式--传统的和pythonic的,这样你就能理解解决方案了:

代码:

代码语言:javascript
复制
dictionary_count =  {'count': {'-5': {'R': 279, 'K': 336, 'D': 171, 'E': 246, 'N': 239, 'Q': 371, 'S': 894, 'G': 520, 'H': 122, 'T': 647, 'A': 643, 'P': 712, 'Y': 126, 'V': 444, 'M': 106, 'C': 74, 'L': 473, 'F': 202, 'I': 239, 'W': 35, '!': 15}, '-4': {'R': 270, 'K': 361, 'D': 177, 'E': 265, 'N': 208, 'Q': 361, 'S': 891, 'G': 455, 'H': 131, 'T': 700, 'A': 653, 'P': 699, 'Y': 128, 'V': 455, 'M': 114, 'C': 37, 'L': 495, 'F': 215, 'I': 235, 'W': 34, '!': 10} } }

# desired : [[('R', 279),('K', 336),('D', 171),('E', 246),('N', 239),('Q', 371),('S', 894),('G', 520),('H', 122),('T', 647),('A', 643),('P', 712),('Y', 126),('V', 444),('M', 106),('C', 74),('L', 473),('F', 202),('I', 239),('W', 35),('!', 15})],[('R', 270),('K', 361),('D', 177),('E', 265),('N', 208),('Q', 361),('S', 891),('G', 455),('H', 131),('T', 700),('A', 653),('P', 699),('Y', 128),('V', 455),('M', 114),('C', 37),('L', 495),('F', 215),('I', 235),('W', 34),('!', 10}]]

# standard way -- convert it to pythonic later
res_lst = []
for k, v in dictionary_count.items():
    for k1, v1 in v.items():
        lst = []
        for k2, v2 in v1.items():
            lst.append((k2,v2))
        res_lst.append(lst)
print(res_lst, '\n')

py_list = [[[((k2,v2)) for k2, v2 in v1.items()]for k1, v1 in v.items()] for k, v in dictionary_count.items()] 
you_need = py_list[0]
print(you_need)

输出:

代码语言:javascript
复制
[[('R', 279), ('K', 336), ('D', 171), ('E', 246), ('N', 239), ('Q', 371), ('S', 894), ('G', 520), ('H', 122), ('T', 647), ('A', 643), ('P', 712), ('Y', 126), ('V', 444), ('M', 106), ('C', 74), ('L', 473), ('F', 202), ('I', 239), ('W', 35), ('!', 15)], [('R', 270), ('K', 361), ('D', 177), ('E', 265), ('N', 208), ('Q', 361), ('S', 891), ('G', 455), ('H', 131), ('T', 700), ('A', 653), ('P', 699), ('Y', 128), ('V', 455), ('M', 114), ('C', 37), ('L', 495), ('F', 215), ('I', 235), ('W', 34), ('!', 10)]] 

[[('R', 279), ('K', 336), ('D', 171), ('E', 246), ('N', 239), ('Q', 371), ('S', 894), ('G', 520), ('H', 122), ('T', 647), ('A', 643), ('P', 712), ('Y', 126), ('V', 444), ('M', 106), ('C', 74), ('L', 473), ('F', 202), ('I', 239), ('W', 35), ('!', 15)], [('R', 270), ('K', 361), ('D', 177), ('E', 265), ('N', 208), ('Q', 361), ('S', 891), ('G', 455), ('H', 131), ('T', 700), ('A', 653), ('P', 699), ('Y', 128), ('V', 455), ('M', 114), ('C', 37), ('L', 495), ('F', 215), ('I', 235), ('W', 34), ('!', 10)]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65153076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档