Python:从字典创建子字典

时间:2014-08-08 15:37:11

标签: python dictionary

我有一个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}

任何pythonic方式做同样的事情?

3 个答案:

答案 0 :(得分:2)

您可以这样尝试:首先,从字典中获取项目,作为键值对列表。词典中的条目是无序的,因此如果您希望块具有特定顺序,则对项目进行排序,例如,按键。现在,您可以使用列表理解,从项目列表中切割出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}]

答案 1 :(得分: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的倍数。您也可以使用模数(%)直接简化您的方法

答案 2 :(得分:0)

在Python 2.7.12上测试:

const params = new HttpParams()
.set('aaa', '111')
.set('bbb', "222");