Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中向字典键添加多个值_Python - Fatal编程技术网

如何在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相互补偿,因此当您恰好插入两个元素时,它具有所需的行为。