簡體   English   中英

如何遍歷字典字典並制作二維數組?

[英]How to loop through a dictionary of dictionaries and make a 2d array?

所以,我有一個這樣的字典:

dic_parsed_sentences = {'religion': {'david': 1, 'joslin': 1, 'apolog': 5, 'jim': 1, 'meritt': 2}, 
 'sport': {'sari': 1, 'basebal': 1, 'kolang': 5, 'footbal': 1, 'baba': 2},
 'education': {'madrese': 1, 'kelas': 1, 'yahyah': 5, 'dars': 1},
 'computer': {'net': 1, 'internet': 1},
 'windows': {'copy': 1, 'right': 1}}

我想根據字典中字典的長度來遍歷它。

例如,
它有兩個長度為5的項目,一個長度為4的項目和兩個長度為2的項目。我想將相同長度的項目一起處理(類似於pandas中的一個組)。
所以第一次迭代輸出看起來像這樣(因為你看到只有長度為5的項目在這里可用):

[[david, joslin, apolog, jim, meritt],
 [sari, baseball, kolang, footbal, baba]]

並且下一次迭代它將生成下一個相同長度的項目:

[[madrese, kelas, yahyah, dars]]

最后一次迭代

[[net, internet],
 [copy, right]]

為什么我們這里只有三次迭代? 因為我們在字典dic_parsed_sentences只有三種不同長度的項目。 我做過類似的事情,但我不知道如何遍歷相同長度的項目:

for i in dic_parsed_sentences.groupby(dic_parsed_sentences.same_length_items): # this line is sodoku line I dont know how to code it(I mean iterate through same length items in the dicts)
    for index_file in dic_parsed_sentences:
        temp_sentence = dic_parsed_sentences[index_file]
        keys_words = list(temp_sentence.keys())
        for index_word in range(len(keys_words)):
            arr_sent_wids[index_sentence, index_word] = 
                                keys_words[index_word]
    index = index + 1
    index_sentence = index_sentence + 1

更新:

for length, dics in itertools.groupby(dic_parsed_sentences, len):
    for index_file in dics:
        temp_sentence = dics[index_file]
        keys_words = list(temp_sentence.keys())
        for index_word in range(len(keys_words)):
                test_sent_wids[index_sentence, index_word] = lookup_word2id(keys_words[index_word])
        index = index + 1
        index_sentence = index_sentence + 1

按長度排序字典元素后,可以使用itertools.groupby

import itertools
items = sorted(dic_parsed_sentences.values(), key = len, reverse = True)
for length, dics in itertools.groupby(items, len):
    # dics is all the nested dictionaries with this length
    for temp_sentence in dics:
        keys_words = list(temp_sentence.keys())
        for index_word in range(len(keys_words)):
                test_sent_wids[index_sentence, index_word] = lookup_word2id(keys_words[index_word])
        index = index + 1
        index_sentence = index_sentence + 1     
bylen = {}
for v in dic_parsed_sentences.values():
    l = len(v)
    if not l in bylen:
        bylen[l] = []
    bylen[l].append(list(v.keys()))

for k in reversed(sorted(bylen.keys())):
    # use bylen[k]

您可以使用以下方法執行此操作:

finds = [[key, len(dic_parsed_sentences[key])] for key in dic_parsed_sentences]
finds.sort(reverse=True, key=lambda x: x[1])

previous = finds[0][1]
res = []
for elem in finds:
    current = elem[1]
    if current != previous:
        previous = current
        print(res)
        res = []
    res.append(list(dic_parsed_sentences[elem[0]]))
print(res)

暫無
暫無

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

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