Python:从字典创建子字典
我有一个Python字典,比如说
dic = {"aa": 1,
"bb": 2,
"cc": 3,
"dd": 4,
"ee": 5,
"ff": 6,
"gg": 7,
"hh": 8,
"ii": 9}
我想从这个字典中提取出长度为3的子字典,像这样
dic = [{"aa": 1, "bb": 2, "cc": 3},
{"dd": 4, "ee": 5, "ff": 6},
{"gg": 7, "hh": 8, "ii": 9}]
我写了以下代码:
dic = {"aa": 1,
"bb": 2,
"cc": 3,
"dd": 4,
"ee": 5,
"ff": 6,
"gg": 7,
"hh": 8,
"ii": 9}
i = 0
dc = {}
for k, v in dic.items():
if i==0 or i==3 or i==6:
dc = {}
dc[k] = v
if i==2 or i==5 or i==8:
print dc
i = i + 1
输出结果是:
{'aa': 1, 'ee': 5, 'hh': 8}
{'cc': 3, 'bb': 2, 'ff': 6}
{'ii': 9, 'gg': 7, 'dd': 4}
有没有什么更简洁的Python方法来实现这个功能呢?
3 个回答
0
在Python 2.7.12上进行了测试:
def parts(l, n):
for i in xrange(0, len(l), n):
yield l[i:i + n]
somedict = {
"aa": 1,
"bb": 2,
"cc": 3,
"dd": 4,
"ee": 5,
"ff": 6,
"gg": 7,
"hh": 8,
"ii": 9,
}
keys = somedict.keys()
keys.sort()
for subkeys in parts(keys, 3):
print({k:somedict[k] for k in subkeys})
1
new_dic_list = [k for k in dic.items()]
for i in range(0,len(new_dic_list),3):
dc=dict(new_dic_list[i:i+3])
这个方法只适用于3的倍数。你也可以使用取余运算符(%)来直接简化你的方法。
4
你可以这样尝试:首先,从字典中获取项目,得到一组键值对的列表。字典里的条目是没有顺序的,所以如果你想让这些部分有特定的顺序,可以先对这些项目进行排序,比如按照键来排序。接下来,你可以使用列表推导式,从这个项目列表中每次切出3个,然后再把它们变回字典。
>>> items = sorted(dic.items())
>>> [dict(items[i:i+3]) for i in range(0, len(items), 3)]
[{'aa': 1, 'bb': 2, 'cc': 3},
{'dd': 4, 'ee': 5, 'ff': 6},
{'gg': 7, 'hh': 8, 'ii': 9}]