首页 > 解决方案 > 如何根据另一个字典的键长度生成不同的字典?

问题描述

我有以下名为k. 如您所见,在字典中,我将项的元组作为键,将整数作为其值。可以看出,密钥具有不同的长度。我想要做的是根据其键的长度将这个字典中的元素分成不同的字典。

例如:

在此处输入图像描述

我正在尝试使用以下代码来解决前面解释的问题。

# base name
nombre = 'dic'
for key in original_dictionary:
    for i in range(1, 6):
        # generate names of the dictionaries
        name = nombre + str(i)
        # create empty dictionaries (based on the name assigned above)
        name = {}

        # update elements within the dictionary
        if len(key) == i:
            name.update(key, original_dictionary[key])

但是我遇到了这个错误:

TypeError: update expected at most 1 arguments, got 2

我不太确定如何解决它。

标签: pythonpython-3.xdictionary

解决方案


您可以使用dictionary comprehension

以下面的 dict 为例:

In [260]: k = {('milk',):2, ('beer',):5, ('umbrella',):8, ('diaper', 'milk'):1, ('diaper', 'bread'):2, ('diaper', 'milk', 'bread'):1, ('diaper', 'milk', 'beer'): 1}

In [270]: d1 = {key:v for key, v in k.items() if len(key) == 1}

In [271]: d2 = {key:v for key, v in k.items() if len(key) == 2}

In [272]: d3 = {key:v for key, v in k.items() if len(key) == 3}

In [273]: d1
Out[273]: {('milk',): 2, ('beer',): 5, ('umbrella',): 8}

In [274]: d2
Out[274]: {('diaper', 'milk'): 1, ('diaper', 'bread'): 2}

In [275]: d3
Out[275]: {('diaper', 'milk', 'bread'): 1, ('diaper', 'milk', 'beer'): 1}

推荐阅读