Python 3.x 向字典中包含的数组添加值

Python 3.x 向字典中包含的数组添加值,python-3.x,Python 3.x,请问如何将新元素添加到作为字典值的数组中 当我尝试添加如下元素时: res[key].append(newelement) 它只是删除上一个值 我的完整代码看起来像 data = [{"signal_name": "X", "signal_value": "valueX1"}, {"signal_name": "Y", "signal_value": "valueY1"}, {"signal_name": "Z",

请问如何将新元素添加到作为字典值的数组中

当我尝试添加如下元素时:

res[key].append(newelement)
它只是删除上一个值

我的完整代码看起来像

        data = [{"signal_name": "X", "signal_value": "valueX1"},
                {"signal_name": "Y", "signal_value": "valueY1"},
                {"signal_name": "Z", "signal_value": "valueZ1"},
                {"signal_name": "X", "signal_value": "valueX2"}]

        res = {}
        for i in data:
            for k, v in i.items():
                if k == "signal_name":
                    res[v] = []
                    temp = v
                if k == "signal_value":
                    res[temp].append(v)
我的输出如下所示

Reading from input
{'X': ['valueX1']}
{'X': ['valueX1'], 'Y': ['valueY1']}
{'X': ['valueX1'], 'Y': ['valueY1'], 'Z': ['valueZ1']}
{'X': ['valueX2'], 'Y': ['valueY1'], 'Z': ['valueZ1']}
Done reading
因此,X值被更新,而不是包含['valueX1','valueX2']

res[temp].append(v)
效果很好。在
res[v]=[]
行中,当您第二次或再次遇到
X
时,您正在分配一个空列表

我建议你使用

输出:

{'X': ['valueX1', 'valueX2'], 'Y': ['valueY1'], 'Z': ['valueZ1']}

请尝试以下代码,希望这会有所帮助:

data = [{"signal_name": "X", "signal_value": "valueX1"},
                {"signal_name": "Y", "signal_value": "valueY1"},
                {"signal_name": "Z", "signal_value": "valueZ1"},
                {"signal_name": "X", "signal_value": "valueX2"}]

res = {}
for i in data:
    temp = None
    for k, v in i.items():
        if k == "signal_name":
            try:
                res[v]
            except:
                res[v]=[]   #<-- As everytime you were initializing it, this was the error 
            temp = v
        if k == "signal_value":
            print(temp)
            print(res[temp])
            res[temp].append(v)

您应该在python中尝试dict的
.update()
函数,这将创建更新后的dict
res[temp].append(v)
的副本。在
res[v]=[]
行中,当您第二次和第二次遇到
X
时,您正在分配一个空列表。谢谢@Alperen,您是对的。我刚刚添加了一个条件,现在它可以工作了well@Reims很高兴听到这个消息。看看我贴的答案。我想,它会给你另一个视角。@Reims,如果它对你有用,请更新我的回答嘿,我想添加第三个参数吗?喜欢时间,但要对齐所有值,然后是时间?像{'X':['valueX1','valueX2',…,'valueXN','timeX1','timeX2',…,'timeXN',],'Y':['valueY1'],'Z':['valueZ1']}这样的输出?我想,你的意思是如果数据字典中有“信号时间”。您可以使用列表列表或列表元组。添加一行作为
time=d[“信号时间”]
并更改这些行:
l=res.get(key,([],[])
l[0]。追加(值)
l[1]。追加(时间)
。最后,您将有一个输出作为
{'X':(['valueX1','valueX2',…,'valueXN'],['timeX1','timeX2',…,'timeXN'])
是的,这就是我的意思,只是valueX和timeX应该在同一个数组中,只是所有的valueX首先出现,然后是相应的timeX。就像{'X':(['valueX1','valueX2',…,'valueXN','timeX1','timeX2',…,'timeXN'])我可能会将这两个数组连接起来?是的,您可以在最后连接这两个列表。否则,我看不到在一个列表中维护它们的有效方法。
data = [{"signal_name": "X", "signal_value": "valueX1"},
                {"signal_name": "Y", "signal_value": "valueY1"},
                {"signal_name": "Z", "signal_value": "valueZ1"},
                {"signal_name": "X", "signal_value": "valueX2"}]

res = {}
for i in data:
    temp = None
    for k, v in i.items():
        if k == "signal_name":
            try:
                res[v]
            except:
                res[v]=[]   #<-- As everytime you were initializing it, this was the error 
            temp = v
        if k == "signal_value":
            print(temp)
            print(res[temp])
            res[temp].append(v)
{'X': ['valueX1', 'valueX2'], 'Y': ['valueY1'], 'Z': ['valueZ1']}