【问题标题】:Iterate over dict from value to value从一个值到另一个值迭代dict
【发布时间】:2016-12-10 14:10:29
【问题描述】:

我有一本这样的字典:

data = {1: [u'-', u's'], 2: [u'je', u'co', u'na'], ...}

KEY 是属于它的单词的长度。我想为长于 X 且短于 Y 的单词调用一个函数(计算 levenshtein 距离)。我该怎么做?

主要问题是获取字典长度,因为 len() 返回字典中的项目数,而不是键。

现在我是这样做的:

for k in data:
    if k >= len(word)-distance and k <= len(word)+distance:
    for item in data[k]:
        if levenshtein(word, item) == distance:
                    words.append(item)
return words

【问题讨论】:

  • 你到底卡在哪一部分?获取 X 和 Y 之间的键?访问这些键的值?对这些列表中的所有项目调用该函数?请具体。
  • pypi.python.org/pypi/python-Levenshtein/0.12.0docs.python.org/2/tutorial/datastructures.html#dictionaries 将帮助您入门。发布你现在拥有的代码,你会得到更好的答案。
  • 如果通过更改“for k in data”,我想摆脱第一个......对不起,我不清楚
  • 请澄清您的帖子:data 是什么?那是字典的例子吗? XY 是什么?他们是这个字典的关键吗?如果您询问如何在某些值之间获取 dict 的键,您可以这样做 [k for k in data if X&lt;k&lt;y]
  • 你的代码缩进错误。此外,在 Python 中,您可以将语句编写为 if len(word)-distance &lt;= k &lt;= len(word)+distance:。请注意,与给定键 k 关联的列表长度仅为 len(data[k])

标签: python python-2.7 dictionary iteration


【解决方案1】:

data.keys() 将为您提供密钥,您可以对其进行迭代。

【讨论】:

  • 谢谢,我在查看文档时一定错过了这个......
【解决方案2】:

你可以得到一个长度在 X 和 Y 之间的所有单词的列表

sum((words for key, words in data.items() if X<key<Y), [])

【讨论】: