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
循环中增加一个计数器吗?