从python dict更新geoJSON文件

时间:2013-10-07 22:11:46

标签: python dictionary geojson

我有一个大型的geoJSON文件,可以提供选举地图。我已经删除了一个站点,并将选民区结果返回到一个如下所示的python词典:{u'605': [u'56', u'31'], u'602': [u'43', u'77']等...}其中键是区号,值列表是第一个候选人的投票和第二个候选人的投票票。

我想用字典中的结果更新我的geoJSON文件 - 这是所有选民区。在我的geoJSON文件中,我将区号作为我的键/值对之一(例如 - "precNum": 602)。如何使用字典中的结果更新每个形状?

我可以使用以下内容来定位和遍历geoJSON文件:

for precincts in map_data["features"]:
    placeVariable = precincts["properties"]

    placeVariable["precNum"] 
    #This gives me the precinct number of the current shape I am in.

    placeVariable["cand1"] = ?? 
    # I want to add the Value of first candidate's vote here

    placevariable["cand2"] = ?? 
    # I want to add the Value of second candidate's vote here

任何想法都将是一个巨大的帮助。

2 个答案:

答案 0 :(得分:1)

您可以像这样更新它。

your_dict = {u'605': [u'56', u'31'], u'602': [u'43', u'77']}

for precincts in map_data["features"]:

    placeVariable = precincts["properties"]
    prec = placeVariable["precNum"] 

    if your_dict.get(prec): #checks if prec exists in your_dict
        placeVariable["cand1"] = your_dict['prec'][0]
        placevariable["cand2"] = your_dict['prec'][0]

答案 1 :(得分:0)

你的问题令人困惑。 您需要更好地识别您的变量。

听起来你正试图累积投票总数。 因此,你想要:

  • 分区100:[1,200]
  • 分区101:[4,300]

添加到:

  • [5,500]

设定累加器的累加器数组。您可以丢弃哪些投票来自您刚刚添加的信息:

for vals in map_data['features'].values():
    while len(accum) < len(vals):
        accum.append(0)
    for i in range(len(vals)):
        accum[i] += vals[i]

这是一个证明解决方案的示例程序:

>>> x = { 'z': [2, 10, 200], 'y' : [3, 7], 'b' : [4, 8, 8, 10 ] }
>>> accum = []
>>> for v in x.values():
...   while len(accum) < len(v):
...     accum.append(0)
...   for i in range(len(v)):
...     accum[i] += v[i]
... 
>>> accum
[9, 25, 208, 10]
>>>