Make a empty lists and append all the sub-keys of dictionary
我有一本字典,上面有这样的子字典:
ZZU1所以当我做EDOCX1的时候,我得到了EDOCX1但这种模式会重复出现,我的意思是每个子字典都有相同的子键,并且每个子字典的相对长度相同。所以,如果我用EDOCX1 2在sub-dict中添加一些参数,那么我将向其他键添加相同的参数。
现在,我的问题是,每当子字典中的某个项目增加时,我必须创建一个空白列表,并通过以下方式将其值附加到该列表中:
ZZU1起初我认为这是一个很好的方法,但是随着我的子字典中的项目越来越多,我需要创建一个空列表,并附加和返回它。
有什么方法可以使这个过程自动化吗?因此,如果我有一个子键名称EDOCX1-3,我的函数可以自动创建一个空列表EDOCX1-4,并像EDOCX1-5一样附加它,然后在我通过以下方式调用get contacts时返回它:
EDOCX1-6号。
我能写一个函数吗?
在我的字典中计算子键,并通过将EDOCX1作为后缀生成空列表。
将各自的值附加到列表中,并将其添加到RETURN语句中。
更新
如果我想控制要使用的值,默认dict解决方案是否仍然有用?目前我正在做:
ZZU1假设我有两个列表:
ZZU1但由于明显的原因,我不能压缩字典。默认dict如何帮助我使用想要使用的值。所以我不想包括EDOCX1到8,我将跳过这一行:
ZZU1-4型而不是简单的解决方案:A组(校正后的一个列表,列表,字典的键是subdicts键和值的列表(收集值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from collections import defaultdict def get_contacts(): id = [10, 12] results = defaultdict(list) for j in id: obj = d[j] for key, value in obj.items(): results[key].append(value) return results results = get_contacts() for k, v in results.items(): print("{} : {}".format(k, v)) |
作为一个通用的规则:当你认为你需要的"动态名称",你真的需要一个字典。
编辑:
1 2 3 | names, emails, managers = get_contacts() for name, email, manager in zip(names, emails, managers): # ... |
=>
1 2 3 4 | results = get_contacts() names, emails, managers = results["Owner Name"], results['Manager Name'], results["Email"] for name, email, manager in zip(names, emails, managers): # ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | data ={10L: {u'Owner Name': u'abc', u'Email': u'[email protected]', u'Manager Name': u'jhon'}, 12L: {u'Owner Name': u'awdaw', u'Email': u'[email protected]', u'Manager Name': u'raghav'}} def get_contact(data, ids): ret_data = {} for i in ids: sub_data = data.get(i) for k in sub_data.keys(): ret_data[k] = ret_data.get(k, []) ret_data[k].append(sub_data[k]) # Doing this will have unordered results so one would have to # throw data into an OrderedDict (from a 3rd party lib like boltons) # return [ret_data[k] for k in ret_data.keys()] # so make sense to return the dict return ret_data |
udpate: 所以你要返回的数据是有序的路你期望。 嗯,你需要告诉你"数据"的钥匙,那你期望他们的订单。
1 2 3 4 5 6 7 8 9 | def get_contact(data, ids): ret_data = {} for i in ids: sub_data = data.get(i) for k in sub_data.keys(): ret_data[k] = ret_data.get(k, []) ret_data[k].append(sub_data[k]) return [ret_data[k] for k in sorted(ret_data.keys())] |
1 2 3 4 5 6 7 8 9 10 11 12 13 | d ={10: {'Owner Name': 'abc', 'Email': '[email protected]', 'Manager Name': 'jhon'}, 12: {'Owner Name': 'awdaw', 'Email': '[email protected]', 'Manager Name': 'raghav'}} from collections import defaultdict def get_contacts(): data = defaultdict(list) for key, val in d.items(): for key1, val1 in val.items(): data[key1 + 's'].append(val1) return data.values() names, emails, managers = get_contacts() >>>print(names, emails, managers) (['abc', 'awdaw'],['[email protected]', '[email protected]'], ['jhon', 'raghav']) |