如何在Python中向字典键添加多个值
我正在尝试将一个值(字符串)添加到我已有的字典中,格式如下:如何在Python中向字典键添加多个值,python,Python,我正在尝试将一个值(字符串)添加到我已有的字典中,格式如下: item1 item2 item3 myDictionary={'key':[item1,item2]} ###将第三个值(item3)添加到已经存在的{'key':['item1','item2']}字典中。 myDictionary['key']=[myDictionary['key'],项目3] ###以第三项作为单独的值列表结束: #{'key':[['item1','item2'],item3]} #而不是得到预期和可取的
item1
item2
item3
myDictionary={'key':[item1,item2]}
###将第三个值(item3)添加到已经存在的{'key':['item1','item2']}字典中。
myDictionary['key']=[myDictionary['key'],项目3]
###以第三项作为单独的值列表结束:
#{'key':[['item1','item2'],item3]}
#而不是得到预期和可取的:
{'key':['item1','item2','item3']}
已将解决方案作为myDictionary[key]尝试。append(value)
会喊出AttributeError:*str*对象没有attribute*append*错误
,因此使用[myDictionary['key',item3]
是为key添加第二个值而不是第三个值的方法
根据要求,这是我尝试运行的实际代码:
currHostDict = {}
for x in netstatinfo:
result = open("result.txt", "a+")
z = re.match("^en", x)
if z:
adapter = re.split(" +", x)[0]
macIp = re.split(" +", x)[3]
if adapter in currHostDict:
#currHostDict[adapter] = [currHostDict[adapter], macIp]
print(type(currHostDict))
currHostDict[adapter].extend([macIp])
#currHostDict[adapter] = [currHostDict[adapter].extend(macIp)]
#currHostDict[adapter] = [currHostDict[adapter].append(macIp)]
#currHostDict[adapter] = "test"
else:
currHostDict[adapter] = macIp
这一个发出了一个AttributeError:“str”对象没有属性“extend”错误
我还可以确认运行此简化代码:
item1 = "item1"
item2 = "item2"
item3 = "item3"
currHostDict = {'en0':[item1,item2]}
currHostDict['en0'].extend([item3])
print(currHostDict)
输出所需的{'en0':['item1','item2','item3']}
但是,这假设字典已经至少有一个键和该键的至少一个值,因为我正在通过currHostDict[adapter]=macIp在原始代码中创建该键
还请注意,else语句将始终首先运行,因此字典始终至少填写一个键及其值。在代码中,问题来自以下行:
currHostDict[adapter] = macIp
因为macIp
是str
而不是str
的列表。
显而易见的解决办法如下:
currHostDict[adapter] = [macIp]
此外,我建议您检查defaultdict
结构。如果请求defaultdict中不存在的密钥,它将使用给定的默认值对其进行初始化
from collections import defaultdict
netstatinfo = ["A - - item1", "B - - item4", "A - - item2", "A - - item3"]
currHostDict = defaultdict(lambda: [])
for x in netstatinfo:
adapter = re.split(" +", x)[0]
macIp = re.split(" +", x)[3]
currHostDict[adapter].append(macIp)
print(dict(currHostDict))
# {'A': ['item1', 'item2', 'item3'], 'B': ['item4']}
在代码中,问题来自以下行:
currHostDict[adapter] = macIp
因为macIp
是str
而不是str
的列表。
显而易见的解决办法如下:
currHostDict[adapter] = [macIp]
此外,我建议您检查defaultdict
结构。如果请求defaultdict中不存在的密钥,它将使用给定的默认值对其进行初始化
from collections import defaultdict
netstatinfo = ["A - - item1", "B - - item4", "A - - item2", "A - - item3"]
currHostDict = defaultdict(lambda: [])
for x in netstatinfo:
adapter = re.split(" +", x)[0]
macIp = re.split(" +", x)[3]
currHostDict[adapter].append(macIp)
print(dict(currHostDict))
# {'A': ['item1', 'item2', 'item3'], 'B': ['item4']}
如果myDictionary[key].append(value)
给出了该错误,那么您的字典与代码中的示例不一样。请发布一个。如果您键入:print(键入(myDictionary)),您可以看到它不起作用的原因。您的Dict现在可能是一个字符串。@JaFizz我得到了
,然后,AttributeError请编辑问题以包含代码,其中append
给出了AttributeError。此代码不正确。@kaya3我想你是对的..:P问题与问题完全不符。如果myDictionary[key].append(value)
给出该错误,则您的字典与代码中的示例不符。请发布一个。如果您键入:print(键入(myDictionary)),您可以看到它不起作用的原因。您的Dict现在可能是一个字符串。@JaFizz我得到了
,然后,AttributeError请编辑问题以包含代码,其中append
给出了AttributeError。此代码不正确。@kaya3我想你是对的..:P这个问题与所问的完全不同。这确实是个问题,但是,我仍然不明白为什么使用currostdict[adapter]=[currostdict[adapter],macIp]
允许我将第二项2添加到我的字典中,而不是第三项-知道我使用了currostdict[adapter]=macIp首先。只有两个bug相互补偿,因此当您插入正好两个元素时,它具有所需的行为。这确实是个问题,但是,我仍然不理解为什么使用currostdict[adapter]=[currostdict[adapter],macIp]
允许我将第二项2添加到myDictionary中,而不是第三项-知道我首先使用了currHostDict[adapter]=macIp
。只有两个bug相互补偿,因此当您恰好插入两个元素时,它具有所需的行为。