2017-06-17 48 views
-1

我有这个字典有很多键,每个键都有一个坐标列表(x,y,r),每个坐标列表都有自己的列表。当我试图访问这些坐标值时,我遇到了一个大问题。我收到一个错误,说TypeError: 'float' object is not iterable。我试图将我的字典转换为一个类似的新字典,但允许我访问这些值。浮点错误字典中的嵌套列表

例如, 老:{key: [[x,y,r],[x,y,r],...] 新:{key: [(x,y),(x2,y2),...]}

的最大问题是,他们是漂浮,我似乎无法访问它们,将它们转换成一个整数值。

这是我的词典看起来像但包含更多的键和那些键可以包含更多的值列表中的坐标。

{'0-0.png'] : [[99.0, 11.0, 2.8284271247461903], [17.0, 30.0, 2.8284271247461903]]} 

我的丑陋的代码:

```

def correct_coordinates(dic): 
    big_first = 0 
    big_second = 0 
    first = 0 
    second = 0 
    while first < 82: 
     image = '{}-{}.png'.format(big_first, big_second) 
     if second < 14: 
      im = '{}-{}.png'.format(first, second) 
      if img_count < 4: 
       new_coordinates = [] 
       for coors in dic[im]: 
        print(np.array(coors)) 
        break 
       new_coordinates = [c + (226 * img_count) for coors in dic[im] for c in coors] 
       print(new_coordinates) 
       break 
       coor_226[image].extend(new_coordinates) 
       second += 1 
       img_count += 1 
      elif img_count == 4: 
       new_coordinates = [c + (226 * img_count) for coors in dic[im] for c in coors] 
       coor_226[image].extend(new_coordinates) 
       second += 1 
       img_count = 0 

     elif second == 14: 
      im = '{}-{}.png'.format(first, second) 
      new_coordinates = [c + (226 * img_count) for coors in dic[im] for c in coors] 
      coor_226[image].extend(new_coordinates) 
      big_f += 1 
      big_s = 0 
      first += 1 
      second = 0 

    final_coors = second_corrected_coordinates(coor_226) 

    for k in final_coors.keys(): 
     arr = np.array(final_coors[k]) 
     arr = list(zip(arr[0::3], arr[1::3])) 
     final_coors[k] = arr 

    pickle.dump(final_coors, open('../data/corr_coor_dict.pkl', 'wb')) 

```

big_first的和big_second只是指的标记的那些值较大的图像。

+1

“[x,y,r]”变成'(x,y)'后面的“逻辑”是什么。你能否用有问题的部分展示你的代码样本?很难破译并提供当前提供的信息的帮助。 – idjaw

+2

如果没有一点代码,或者字典数据的片段(样本),提供有用的建议或具体的答案会有点困难。请提供您使用的代码和字典,我们很乐意提供帮助。 – davedwards

+0

这是**没有必要添加*请帮助!*到您的标题。已经很清楚你需要帮助,或者你不会在这里发布一个问题。避免在标题和问题主体中出现无关的,无用的噪音,针对你所要求的具体内容,包括你的代码的*相关部分*以及询问*特定*问题,我们可以尝试提供帮助。 *请帮助我*完全不是问题;你还应该看到[为什么“有人可以帮我吗?”不是一个真正的问题?](https://.stackoverflow.com/q/284236/62576) –

回答

0

您可以通过DIC的项目迭代,然后使用列表解析生成新值,如下所示:

dic = {'key1': [[5.3, 5.5, 1.1], [2.2, 3.3, 1.1]], 'key2': [[5.3, 5.5, 1.1], [2.2, 3.3, 1.1]]} 
newdic = {} 
for k, v in dic.items(): 
    newdic[k] = [(i[0], i[1]) for i in v] 
print newdic 

输出:

{'key2': [(5.3, 5.5), (2.2, 3.3)], 'key1': [(5.3, 5.5), (2.2, 3.3)]} 

你也可以用它代替循环字典解析,如下所示:

dic = {'key1': [[5.3, 5.5, 1.1], [2.2, 3.3, 1.1]], 'key2': [[5.3, 5.5, 1.1], [2.2, 3.3, 1.1]]} 
newdic = {k: [(i[0], i[1]) for i in v] for k, v in dic.items()} 
print newdic 
+0

如果使用python