字典中的嵌套列表,其中包含浮点错误

时间:2017-06-17 01:16:10

标签: python dictionary floating-point

我有这个字典有很多键,每个键都有一个坐标列表(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_firstbig_second只是引用标有这些值的较大图片。

1 个答案:

答案 0 :(得分:0)

您可以迭代dic项目,然后使用list comprehension生成新值,如下所示:

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