Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何循环浏览字典并生成2d数组?_Python_Arrays_Dictionary_Multidimensional Array - Fatal编程技术网

Python 如何循环浏览字典并生成2d数组?

Python 如何循环浏览字典并生成2d数组?,python,arrays,dictionary,multidimensional-array,Python,Arrays,Dictionary,Multidimensional 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}

我有一本这样的字典:

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的项目。我想一起处理相同长度的项目(类似于熊猫中的分组)。
因此第一次迭代的输出将如下所示(正如您在此处看到的,只有长度为5的项目可用):

下一次迭代它将生成下一个相同长度的项目:

[[madrese, kelas, yahyah, dars]]
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
最后一次迭代

[[net, internet],
 [copy, right]]
为什么我们这里只有三次迭代?因为我们在字典中只有三种不同长度的项目
dic\u parsed\u句子
。 我做过类似的事情,但我不知道如何迭代相同长度的项目:

[[madrese, kelas, yahyah, dars]]
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     

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

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)

你说的“项目长度”是什么意思?我指的是第二本词典中项目的长度。因此,外部dic中有两个dic具有长度5@sobek我还包括和示例,请参阅我的更新请制作一个包含预期输出和有效代码的示例。(例如,中的
是无效的)@wjandrea确保我提供了一个最小的可复制示例。事实上,我知道这是不正确的,那部分是我不知道如何编程的部分,这就是为什么我只是把我的意思作为数独。当然我会更新的谢谢你的帮助。我没什么问题让它工作。它说
TypeError:'itertools.\u gropper'对象是不可下标的
dics
不是字典。只需对dics中的temp_语句使用
实际上,我运行的脚本与您相同,并且得到了这个
'str'对象没有属性“keys”
我认为
中没有
keys
temp_语句
需要使用
dic_解析的句子。value()
获取值而不是键。您不能在
for
循环中增加一个计数器吗?