关于python:创建一个空列表并附加字典的所有子键

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'])