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