Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 忽略或回避名称错误_Python_String_List_Set_Jinja2 - Fatal编程技术网

Python 忽略或回避名称错误

Python 忽略或回避名称错误,python,string,list,set,jinja2,Python,String,List,Set,Jinja2,我觉得我在这里把小题大做,但我想不出或不知道有什么更好的方法来做到这一点 简而言之,我有一个列表,看起来像: [[4.54323,5.4325],[7.235,3.67543],[9.342543,1.65323] 而我需要一个如下所示的列表: [{lat:4.54323,lng:5.4325},{lat:7.235,lng:3.67543},{lat:9.342543,lng:1.65323}] 我做了一些我不自豪的事情,结果是: [{lat:4.54323,lng:5.4325},{lat:

我觉得我在这里把小题大做,但我想不出或不知道有什么更好的方法来做到这一点

简而言之,我有一个列表,看起来像:

[[4.54323,5.4325],[7.235,3.67543],[9.342543,1.65323]

我需要一个如下所示的列表:

[{lat:4.54323,lng:5.4325},{lat:7.235,lng:3.67543},{lat:9.342543,lng:1.65323}]

我做了一些我不自豪的事情,结果是:

[{lat:4.54323,lng:5.4325},{lat:7.235,lng:3.67543},{lat:9.342543,lng:1.65323}]

是的,一些字符串操作,现在我被一个字符串列表困住了。然后,我尝试评估所述列表中的每个元素,但得到了一个
NameError:name'lat'未定义。
毫不奇怪

所以这是一个多部分的问题。有没有一种方法可以在不将元素转换为字符串和替换字符的情况下获得我想要的内容?或者,我可以计算这些字符串,或者将其转换为它们应该是的任何数据类型(我认为是集合)。这个变量只会被发送到一个HTML文件,用Jinja替换一个变量。因此,python并不需要真正理解它(我使用的是2.7.x)

编辑:这是我正在使用的方法,由于工作原因,我正在积极尝试不共享那么多代码,抱歉。在方法的生命周期中,也有很多不同的尝试。所以有些台词可能看起来很奇怪

evalledCoords = []

def make_points(coords):
if(coords):
    for x in range(0, len(coords)):
        # remove first element, not needed.
        coords[x].pop(0)
        coords[x] = str(coords[x]).replace("[", "{lat: ").replace(",", ", lng:").replace("]", "}")
        # See outputs
        print '\n', coords[x]
        print 'evalled coords', evalledCoords.append(eval(coords[x]))
return coords
如果你想解决“我有这个,我想要这个”的问题,可以简单地用

更新

使你的功能发挥作用

def make_points(coords):
    return map(lambda x: {'lat': x[0], 'lng': x[1]}, coords)
如果你想解决“我有这个,我想要这个”的问题,可以简单地用

更新

使你的功能发挥作用

def make_points(coords):
    return map(lambda x: {'lat': x[0], 'lng': x[1]}, coords)

根据提供的数据结构和您希望实现的预期输出,可以通过对现有数据结构进行简单的循环并创建新的字典列表来实现:

coords = [ [4.54323, 5.4325], [7.235, 3.67543], [9.342543, 1.65323] ]

new_list = []
for data in coords:
    new_list.append({
        'lat': data[0],
        'lng': data[1]
    })

print(new_list)
# [{'lng': 5.4325, 'lat': 4.54323}, {'lng': 3.67543, 'lat': 7.235}, {'lng': 1.65323, 'lat': 9.342543}]
或者,简单地说,作为一个列表:

new_list = [{'lat': d[0], 'lng': d[1]} for d in coords]

print(new_list)
# [{'lng': 5.4325, 'lat': 4.54323}, {'lng': 3.67543, 'lat': 7.235}, {'lng': 1.65323, 'lat': 9.342543}]

根据提供的数据结构和您希望实现的预期输出,可以通过对现有数据结构进行简单的循环并创建新的字典列表来实现:

coords = [ [4.54323, 5.4325], [7.235, 3.67543], [9.342543, 1.65323] ]

new_list = []
for data in coords:
    new_list.append({
        'lat': data[0],
        'lng': data[1]
    })

print(new_list)
# [{'lng': 5.4325, 'lat': 4.54323}, {'lng': 3.67543, 'lat': 7.235}, {'lng': 1.65323, 'lat': 9.342543}]
或者,简单地说,作为一个列表:

new_list = [{'lat': d[0], 'lng': d[1]} for d in coords]

print(new_list)
# [{'lng': 5.4325, 'lat': 4.54323}, {'lng': 3.67543, 'lat': 7.235}, {'lng': 1.65323, 'lat': 9.342543}]

作为使用字典的一种选择,考虑使用命名元组来存储位置数据。它们使用更少的RAM,并且可以通过索引或作为属性访问组件。由于命名元组是元组的一种类型,因此它们是不可变的,但通常将某个位置的(纬度、经度)信息存储在不可变的数据结构中是有意义的

这里有一个简短的演示

from collections import namedtuple

Pos = namedtuple('Pos', ('lat', 'lng'))

a = Pos(30, 150)
print(a)
print(a[0], a.lng)

coords = [ 
    [4.54323, 5.4325],
    [7.235, 3.67543],
    [9.342543, 1.65323],
]

locations = [Pos(*u) for u in coords]
print(locations)
输出

Pos(lat=30, lng=150)
30 150
[Pos(lat=4.54323, lng=5.4325), Pos(lat=7.235, lng=3.67543), Pos(lat=9.342543, lng=1.65323)]

作为使用字典的一种选择,考虑使用命名元组来存储位置数据。它们使用更少的RAM,并且可以通过索引或作为属性访问组件。由于命名元组是元组的一种类型,因此它们是不可变的,但通常将某个位置的(纬度、经度)信息存储在不可变的数据结构中是有意义的

这里有一个简短的演示

from collections import namedtuple

Pos = namedtuple('Pos', ('lat', 'lng'))

a = Pos(30, 150)
print(a)
print(a[0], a.lng)

coords = [ 
    [4.54323, 5.4325],
    [7.235, 3.67543],
    [9.342543, 1.65323],
]

locations = [Pos(*u) for u in coords]
print(locations)
输出

Pos(lat=30, lng=150)
30 150
[Pos(lat=4.54323, lng=5.4325), Pos(lat=7.235, lng=3.67543), Pos(lat=9.342543, lng=1.65323)]

请显示您的最新代码,以便读者更好地了解您的错误所在。只需在编辑中添加一些相关代码。不幸的是,我不能分享我想要的任何东西。在我说“…这就是我最终得到的”的那一部分,它们是字符串。在给出的示例中,1个列表中有3个字符串。请显示您的最新代码,以便读者更好地了解您的错误所在。只需在编辑中添加一些相关代码。不幸的是,我不能分享我想要的任何东西。在我说“…这就是我最终得到的”的那一部分,它们是字符串。在给出的示例中,1个列表中有3个字符串。很抱歉,我不擅长在注释中设置格式。我有一个屏幕截图,在我的方法中显示了你的想法。但一切都没有改变,我做错了什么@Shmink我已经用你想要的函数更新了这个问题。对不起,我不擅长在评论中设置格式。我有一个屏幕截图,在我的方法中显示了你的想法。但一切都没有改变,我做错了什么@Shmink我已经用你想要的函数更新了问题。你拿着饼干,先生。非常感谢。在for循环之外的简单列表理解为我解决了这个问题,未来的人们。先生,你拿着饼干。非常感谢。for循环之外的简单列表理解为我未来的人们解决了这个问题。啊,是的!我从来没有对无名者给予过足够的关注。好球!啊,是的!我从来没有对无名者给予过足够的关注。好球!