我有一本字典:
{
'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
}
}
答案 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}