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()
函数,这将创建更新后的dictres[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']}