[英]Iterating through zipped objects in Python
我最近一直在努力解决这个问题(尽管这看起来是一件微不足道的事情)。
我有这 3 个字典:
letters_words = {'A': ['allow', 'arise'], 'B': ['bring', 'buy']}
words_cxns = {'allow': ['CXN1', 'CXN2'], 'arise': ['CXN1', 'CXN3'], 'bring': ['CXN2', 'CXN3'], 'buy': ['CXN3']}
cxns_ids = {'CXN1': 1, 'CXN2': 2, 'CXN3': 3}
每个字母都有几个单词,每个单词都与某些结构相关联,每个结构都有一个 id。
最后我想得到这个:
A
allow
CXN1, 1
CXN2, 2
arise
CXN1, 1
CXN3, 3
B
bring
CXN2, 2
CXN3, 3
buy
CXN3, 3
空格和标点符号无关紧要......主要是它被正确列出。
这是我目前正在做的事情:
for letter, words in zip(letters_words.keys(), letters_words.values()):
print(letter)
for word in words:
print(word)
for w, cnxs in zip(words_cxns.keys(), words_cxns.values()):
if w == word:
for c in cxns:
for cxn, ix in zip(cxns_ids.keys(), cxns_ids.values()):
if cxn == c:
print(c, ix)
但是,我的输出目前看起来像这样:
A
allow
CXN1 1
CXN2 2
CXN3 3
arise
CXN1 1
CXN2 2
CXN3 3
B
bring
CXN1 1
CXN2 2
CXN3 3
buy
CXN1 1
CXN2 2
CXN3 3
我错过了什么? :/
您不需要zip
来完成此任务,因为构造仅取决于单词,而不是单词的迭代。 这是产生所需输出的可能解决方案:
for letter, words in letters_words.items():
print('\n' + letter)
for word in words:
print('\n' + word)
cxns = words_cxns[word]
for cxn in cxns:
cxn_id = cxns_ids[cxn]
print(cxn, ',', cxn_id)
无需压缩:
letters_words = {'A': ['allow', 'arise'], 'B': ['bring', 'buy']}
words_cxns = {'allow': ['CXN1', 'CXN2'], 'arise': ['CXN1', 'CXN3'], 'bring': ['CXN2', 'CXN3'], 'buy': ['CXN3']}
cxns_ids = {'CXN1': 1, 'CXN2': 2, 'CXN3': 3}
for k,v in letters_words.items():
print("\n" + k + "\n")
for w in v:
print(w)
for word in words_cxns[w]:
print(word, cxns_ids[word])
输出:
A
allow
CXN1 1
CXN2 2
arise
CXN1 1
CXN3 3
B
bring
CXN2 2
CXN3 3
buy
CXN3 3
试试这个,想法是直接从字典中获取 cxns,而不是使用第二个zip
对象。 我评论了相关行。
for letter, words in zip(letters_words.keys(), letters_words.values()):
print(letter)
for word in words:
print(word)
# no need to create a new zip object, get value from dict instead
for cxns in words_cxns[word]:
print(cxns, cxns_ids[cxns])
这很尴尬,但我犯了一个错字,我找了两天都找不到! 在我的代码建议的第 6 行,我写了cnxs
而不是cxns
。 一旦我改变它,一切正常!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.