我正在python 3.7中使用api调用,该调用返回json数据。
string xml = @"<?xml version=""1.0""?>
<restaurants xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
<restaurant>
<name>Laughing Man</name>
<logo>
<name>Visit the Laughing Man</name>
<imagefile>laughing-man.gif</imagefile>
<width unit=""px"">50</width>
<height unit=""px"">200</height>
</logo>
</restaurant>
<restaurant>
<name>Gong’s Asian Cuisine</name>
<logo>
<name/>
<imagefile>gong-asian-cuisine.gif</imagefile>
<width unit=""px"">150</width>
<height unit=""px"">250</height>
</logo>
</restaurant>
</restaurants>";
List<string> names = new List<string>();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
XmlNodeList nodes = xmlDoc.SelectNodes("/restaurants/restaurant");
foreach (XmlNode itemNode in nodes)
{
XmlNode titleNode = itemNode.SelectSingleNode("name");
if (titleNode != null)
{
names.Add(titleNode.InnerText);
}
}
返回的数据似乎是列表中两个嵌套字典的形式,即
result = (someapicall)
我想从第一个字典中检索键“ name”的值,并从两个字典中检索键“ firmware”的值,并以以下格式存储在新词典中。
[{name:foo, firmware:boo}{name:foo, firmware:bar}]
到目前为止,我已经设法检索了第一个“名称”和第一个“固件”的值,并使用以下命令将其存储在字典中。
{foo:(boo,bar)}
我尝试过。
dict1={}
for i in result:
dict1[(i["networkId"])] = (i['firmware'])
但是正如预期的那样,以上似乎返回了相同的固件两次。
任何人都可以帮助实现以上期望的结果
答案 0 :(得分:3)
您可以使用defaultdict
来累积列表中的值,如下所示:
from collections import defaultdict
result = [{'name':'foo', 'firmware':'boo'},{'name':'foo', 'firmware':'bar'}]
# create a dict with a default of empty list for non existing keys
dict1=defaultdict(list)
# iterate and add firmwares of same name to list
for i in result:
dict1[i['name']].append(i['firmware'])
# reformat to regular dict with tuples
final = {k:tuple(v) for k,v in dict1.items()}
print(final)
输出:
{'foo': ('boo', 'bar')}