我正在尝试将一个键值对从一个词典添加到另一个词典。这听起来很简单,但是dicts的复杂性非常不同。对于上下文,我通过使用python模块json
和csv
解析两个数据文件来构建两个dicts。 json
dict是复杂的,有多个级别,而我的tsv
dict是一个简单的key:value对的dict。让我在索引1处对它们进行切片以说明这一点:
json_data['objects']['counties']['geometries'][1]
>> {'arcs':[[4,5,6,7,8,9]], 'id':30105, 'type': 'Polygon'}
好吧,我想我不能将tsv dict切片为1,但是一个示例切片是:
tsv_data[30105]
>>'Valley'
注意我的tsv键是整数,两个dicts的索引是不同的,实际上是len(tsv_data) != len(json_data[et all])
。但没关系。我的目标是以这样的方式合并它们,即我将名称属性作为键值对添加到json文件中,如下所示:
json_data['objects']['counties']['geometries'][1]
>> {'arcs':[[4,5,6,7,8,9]], 'id':30105, 'type': 'Polygon', 'name':'Valley'}
我复制了一个切片来测试水域:
json_data_subset = copy.copy(json_data['objects']['counties']['geometries'][1])
json_data_subset['name'] = tsv_data[json_data_subset['id']]
>> {'arcs':[[4,5,6,7,8,9]], 'id':30105, 'type': 'Polygon', 'name':'Valley'}
正如你所看到的,在这种情况下它起作用了。所以我认为我走在正确的轨道上并继续迭代:
j = json_data['objects']['counties']['geometries']
for i in j:
j[i]['name'] = tsv_data[j[i]['id']]
但那给了我:
TypeError:list indices必须是整数或切片,而不是dict。
然而它在上面的案例中起作用,我不确定它为什么改变了它的曲调。
我可以做些什么来迭代和合并dicts,就像我对单片案例所做的那样?
为清楚起见,我要做的是for循环使用tsv
文件的id
键在json
文件中找到相应的id号。从那里我可以从tsv
中检索匹配的名称,然后我将其作为json
插入'name':'Name of Value'
文件。我很确定这是最好的方法之一,因为我之间没有顺序或匹配的顺序。如果我错了,请随意提出一个更好的方法。
修改
为了检查我的确切案例,我将提供用于创建词典的代码以及json
和tsv
的链接。这样,您可以简单地复制和粘贴以查看引擎盖下的确切内容。
import json
with open('us.json') as f:
json_data = json.load(f)
import csv
with open('us-county-names.tsv') as f:
tsv_obj = csv.reader(f, delimiter='\t')
tsv_data = {int(rows[0]):rows[1] for rows in tsv_obj}
link对json和tsv(有点大,但不是过度杀伤)
答案 0 :(得分:1)
您面临的问题是由于<div ng-repeat="cssframework in voce.framewrok">
<input type="checkbox" ng-model="costo" ng-change="AggiornaTotale({{cssframework.costo}})"/>
<span>{{cssframework.name}}........<b>{{cssframework.costo | currency}}</b></span>
</div>
不是j
,而是dict
。你需要更像的东西:
list