【问题标题】:Python: dict comprehensions: making a new dictionary with new values from old dictionary idsPython:dict理解:使用旧字典ID的新值制作新字典
【发布时间】:2015-08-20 12:55:23
【问题描述】:

我有一本简单的字典。我正在尝试使用旧字典中的 id 和旧字典中值的长度作为新字典的值创建一个新字典。我花了一个小时在堆栈溢出上试图找到我的答案,但对我没有任何帮助。我也尝试了 PEP 274 python 页面上的一些示例,主题为 https://www.python.org/dev/peps/pep-0274/

这是我正在尝试的(python 2.7):

for k, v in old_dict.iteritems():
    new_dict = { k : len(v) for k in old_dict.keys() for v in old_dict.values()} 

这给了我一个不错的新字典,其中包含旧字典的 id,但值字段在所有 id 中都是相同的。例如:

old_dict = {'a':'andkfndknskfn', 'b':'nadfnn', 'c':'fn'}

使用上面的代码,我得到:

new_dict = {'a':13, 'b':13, 'c':13}

我想要的是:

new_dict = {'a':13, 'b':6, 'c': 2}

我求你可怜我 :) 我确实尝试了很长一段时间来自己找到答案,但我根本没有成功。预先感谢您帮助我找到我确定的简单答案。

【问题讨论】:

    标签: python dictionary key


    【解决方案1】:

    您正在混合字典理解和for 循环,它们或多或少都做同样的事情。只需这样做:

    new_dict = { k: len(v) for k, v in old_dict.iteritems()}
    

    【讨论】:

    • 感谢您的回复。当我这样做时,我收到以下错误:“ValueError:解包的值太多”。值字段很长 - 最大长度约为 4k
    • @LaurenIntagliata:我刚刚使用您在问题中提供的示例数据进行了尝试,它可以工作。你能用一小部分数据重现错误吗?
    • 不,我只是个白痴。我更改了字典调用中的代码,但仍将其保留在循环中。谢谢,效果很好!
    猜你喜欢
    • 2021-01-04
    • 2019-01-16
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2018-06-21
    相关资源
    最近更新 更多