繁体   English   中英

在 Python 中遍历压缩对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM