python - 如何根据另一个字典的键长度生成不同的字典?
问题描述
我有以下名为k
. 如您所见,在字典中,我将项的元组作为键,将整数作为其值。可以看出,密钥具有不同的长度。我想要做的是根据其键的长度将这个字典中的元素分成不同的字典。
例如:
- 前 3 个元素(牛奶、啤酒和雨伞)必须在名为 的字典中
dic1
。 - 接下来的 10 个元素必须在一个名为的字典中,
dic2
因为其键的长度等于 2。 - 最后 4 个元素必须在一个名为的字典中,
dic3
因为其键的长度等于 3。
我正在尝试使用以下代码来解决前面解释的问题。
# 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
我不太确定如何解决它。
解决方案
您可以使用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}
推荐阅读
- awkward-array - 保存笨拙1数组的最佳方法?
- android - 通话中对 Android 音频路由有何影响?
- android - Android CameraX 返回成功但不保存图片
- python - 解密在 O(N) 时间内运行的基数排序的字符串排序版本
- python - 使用 Gekko 的模拟模式 - 初始值为零的变量 C2 (NH2Cl) 不起作用 - 为什么?
- r - 将单个表中的两列合并为一列
- c# - HtmlRendererCore.PdfSharpCore 弹性框
- google-play - 在 Google Play 和 App Store 中获取当前应用版本
- r - 如何在ggplot的图形上写出某个变量的值?
- shell - 如何遍历makefile中的字符串?