将字典的值转换为新字典

2024-10-01 22:41:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典:

{
    'doc0': {
        'individu': 1,
        'manajemen': 1,
        'tahu': 1,
        'logistik': 1,
        'transaksi': 1
    },
    'doc1': {
        'manajemen': 1,
        'transfer': 1,
        'individu':1,
        'tahu':1,
        'transaksi': 1,
        'logistik': 1
    },
    'doc2': {
        'manajemen': 1,
        'logistik': 1,
        'transaksi': 1
    }
}

我想使用Python将其转换为新字典中的以下内容:

{
    'doc0': {
        'individu': 1,
        'manajemen': 1,
        'tahu': 1,
        'logistik': 1,
        'transaksi': 1,
        'transfer':0
    },
    'doc1': {
        'individu': 1,
        'manajemen': 1,
        'tahu': 1,
        'logistik': 1,
        'transaksi': 1
    },
    'doc2': {
        'individu': 0,
        'manajemen': 1,
        'tahu': 0,
        'logistik': 1,
        'transaksi': 1,
        'transfer':0
    }
}

Tags: 字典doc1transferdoc2individutransaksidoc0manajemen
3条回答

您将面临字典中键排序的问题。字典中的键(或键值对)是任意排序的。顺序不是固定的,可以在不同的步骤中更改。你知道吗

为了缓解这个问题,您可以使用模块collections中的OrderedDict。你知道吗

如果我理解你的问题,你就把你的字典整理一下,使它们有相同的键。如果doc1中有一个键,但是doc2缺少它,那么doc2应该用这个键和值0更新。如果这是正确的,那么您更希望复制键,而不是值。你知道吗

这是我的尝试:

from collections import OrderedDict

# your initial data
my_dict = {
    'doc0': {
        'individu': 1,
        'manajemen': 1,
        'tahu': 1,
        'logistik': 1,
        'transaksi': 1
    },
    'doc1': {
        'manajemen': 1,
        'transfer': 1,
        'individu':1,
        'tahu':1,
        'transaksi': 1,
        'logistik': 1
    },
    'doc2': {
        'manajemen': 1,
        'logistik': 1,
        'transaksi': 1
    }
}

# get all keys in a help list
list_of_keys = []
for key in my_dict:
    for dockey in my_dict[key]:
        if dockey not in list_of_keys:
            list_of_keys.append(dockey)
# sort the list
list_of_keys.sort()
# the list looks like this
# ['individu', 'logistik', 'manajemen', 'tahu', 'transaksi', 'transfer']

# now we can iterate through our data
# and align the keys and values in an OrderedDict

my_ordered_dict = OrderedDict()
# get the doc keys and update the ordered dictionary
for key in my_dict:
    my_ordered_dict.update([(key, OrderedDict())])

for i in list_of_keys:
    for key in my_dict:
        if i in my_dict[key].iterkeys():
            my_ordered_dict[key].update([(i, 1)])
        else:
            my_ordered_dict[key].update([(i, 0)])

现在,您在每个字典中都有了所有键,它们被排序并保留顺序。初始数据保持不变。你知道吗

我没有使用任何高级功能,如列表理解、三元运算符或类似功能。这个方法有点幼稚和简单,因为你是一个初学者,我认为你更容易理解每一步。你知道吗

我希望它能帮助你。你知道吗

我不完全清楚您想要完成什么,但是要将dict2中的所有键/值对添加到dict1或在dict1中更新,您需要dict1.update(dict2)。示例:

>>> dict1={"apples":14, "bananas":22}
>>> dict2={"apples":4, "pears":7}
>>> dict1.update(dict2)
>>> dict1
{'apples': 4, 'bananas': 22, 'pears': 7}

或者,如果您只想在dict1中还没有键的情况下从dict2复制键和值,那么

>>> dict1={"apples":14, "bananas":22}
>>> dict2={"apples":4, "pears":7}
>>> for k in set(dict2.keys()) - set(dict1.keys()): 
>>>     dict1[k]=dict2[k]
... 
>>> dict1
{'apples': 14, 'bananas': 22, 'pears': 7}

您可以查看以下代码:

>>> all = list(set([j for i in list(d.keys()) for j in list(d[i].keys())]))

>>> all
['transfer', 'tahu', 'transaksi', 'individu', 'manajemen', 'logistik']

>>> for k in all:
     for j in list(d.keys()):
         if not k in d[j].keys():
             d[j][k]=0

>>> d
{'doc0': {'individu': 1,
  'logistik': 1,
  'manajemen': 1,
  'tahu': 1,
  'transaksi': 1,
  'transfer': 0},
 'doc1': {'individu': 1,
  'logistik': 1,
  'manajemen': 1,
  'tahu': 1,
  'transaksi': 1,
  'transfer': 1},
 'doc2': {'individu': 0,
  'logistik': 1,
  'manajemen': 1,
  'tahu': 0,
  'transaksi': 1,
  'transfer': 0}}

我获取嵌套字典中的所有键,然后创建不存在的值(因此在最后的输出中是零)。你知道吗

相关问题 更多 >

    热门问题