簡體   English   中英

字典列表列表到元組列表列表

[英]List of lists of dictionaries to list of lists of tuples

一開始我有一個字典的字典:

{'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} } }

使用列表理解:

dictionary_count =  [value for value in dictionary_count.values()]
dictionary_count =  [list(col) for col in zip(*[d.values() for d in dictionary_count])]

我有:

[[{'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}]]

但現在我被困住了,我想:

[[('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}]]

我為您提供了如下解決方案。

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 層字典,因此具有列表理解的 output 應該是像[[[('R', 279)]]]這樣的 3 維。 如果您想要像[[('R', 279)]]一樣的 2-dims output ,我建議使用嵌套循環,這樣您可以更自由地自定義 output,如下所示。

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)]]

我給你兩種方式——傳統的和pythonic的,這樣你就可以理解解決方案:

代碼:

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)

Output:

[[('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)]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM