将字典的值转换为新字典

时间:2016-09-13 07:40:31

标签: python dictionary

我有一本字典:

{
    '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
    }
}

3 个答案:

答案 0 :(得分:0)

您可以查看以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)

' check if target is in Column B or Column G
If Target.Column = 2 Or Target.Column = 7 Then

    Select Case Target.Row
        Case 12 To 18, 26 To 32  ' check if target row is 12 to 18 (including) ir between 26 to 32 (including)

            Hours = Target.Value
            If Hours <> 0 Then
                If Hours > 8 Then
                    Target.Value = 8
                    Target.Offset(0, 1).Value = Hours - 8
                    Exit Sub
                Else
                    If Hours < 8 Then
                        Target.Offset(0, 2).Value = 8 - Hours
                    End If
                    Exit Sub
                End If
            End If
    End Select
End If

End Sub

我接受嵌套字典中的所有键,然后创建不存在的值(因此在最后一个输出中为零)。

答案 1 :(得分:0)

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

要缓解此问题,您可以使用模块OrderedDict中的collections

如果我理解你的问题,你想要引入你的词典并使它们具有相同的键。如果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)])

现在,您拥有每个字典中的所有键,它们将被排序并保留顺序。初始数据保持不变。

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

我希望它可以帮到你。

答案 2 :(得分: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}