如何更新我的字典以包含开始和结束点

时间:2017-05-09 07:58:26

标签: python dictionary

一个点被定义为非数字:处于状态的坐标。

我有一个StartPoint A =(x,y),我也有一个EndPoint a =(x,y)。

ExampleState :'a'== state [0] [0]和'A'== state [4] [5]

现在我想要的是一个字典:

d = {'a' : 
            { 'E' : (x,y) } # EndPoint
            { 'S' : (x,y) } # StartPoint
    }

这是我到目前为止所做的事情,我觉得愚蠢但我不知道如何从这里开始

state = ["a224C22300000", 
         "0001643722B00", 
         "0b27275100000", 
         "00c7256500000", 
         "0006A45000000"]

# Find start and endpoints for the flow
# A point is the coordinates in state where it is not a digit
points = {}
for i in range(len(state)):
    for x in range(len(state[i])):
        if(not state[i][x].isdigit()):
            if(state[i][x].lower() != state[i][x]):
                points.update({state[i][x]:(i,x)})
            else:
                points.update({state[i][x]:(i,x)})

# After completion points = {'a': (0, 0), 'b': (2, 1), 'c': (3, 2), 'B': (1, 10), 'A': (4, 4), 'C': (0, 4)}

我也觉得我可以更快地找到使用正则表达式的起点和终点,但这不是我的问题。

1 个答案:

答案 0 :(得分:1)

首先,您的预期输出是不是有效字典。我想你想生成:

from collections import defaultdict

points = defaultdict(dict)
for i,stati in enumerate(state):
    for j,statij in enumerate(stati):
        if statij.isalpha():
            low_statij = statij.lower()
            if statij.isupper():
                points[low_statij]['S'] = (i,j)
            else:
                points[low_statij]['E'] = (i,j)

在这种情况下,你可以简单地写:

>>> points
defaultdict(<class 'dict'>, {'b': {'E': (2, 1), 'S': (1, 10)}, 'a': {'E': (0, 0), 'S': (4, 4)}, 'c': {'E': (3, 2), 'S': (0, 4)}})

这会产生:

dict

如果您想将其转换回香草词典,可以在points上致电>>> dict(points) {'b': {'E': (2, 1), 'S': (1, 10)}, 'a': {'E': (0, 0), 'S': (4, 4)}, 'c': {'E': (3, 2), 'S': (0, 4)}}

C:\Users\%USERNAME%\AppData\Roaming\Folder\