Python:在多个列表中重新计算元素

Python:在多个列表中重新计算元素,python,list,dictionary,Python,List,Dictionary,假设我有一本字典,其列表如下: {0: [31, 32, 58, 59], 1: [31, 32, 12, 13, 37, 38], 2: [12, 13]} 我试图从中获得以下信息: {0: [1, 2, 3, 4], 1: [1, 2, 5, 6, 7, 8], 2: [5, 6]} 所以我按照出现的顺序重新计算了所有条目,但跳过了那些已经重新计算过的条目 我现在看到的是一堆来回运行的for循环,它们可以工作,但看起来一点都不好,有人能告诉我在Python2.7中应该怎么做吗 谢谢只需使

假设我有一本字典,其列表如下:

{0: [31, 32, 58, 59], 1: [31, 32, 12, 13, 37, 38], 2: [12, 13]}
我试图从中获得以下信息:

{0: [1, 2, 3, 4], 1: [1, 2, 5, 6, 7, 8], 2: [5, 6]}
所以我按照出现的顺序重新计算了所有条目,但跳过了那些已经重新计算过的条目

我现在看到的是一堆来回运行的for循环,它们可以工作,但看起来一点都不好,有人能告诉我在Python2.7中应该怎么做吗


谢谢

只需使用以下功能:

def renumerate(data):
    ids = {}
    def getid(val):
        if val not in ids:
            ids[val] = len(ids) + 1
        return ids[val]
    return {k : map(getid, data[k]) for k in sorted(data.keys())}
例子
只需使用如下函数:

def renumerate(data):
    ids = {}
    def getid(val):
        if val not in ids:
            ids[val] = len(ids) + 1
        return ids[val]
    return {k : map(getid, data[k]) for k in sorted(data.keys())}
例子
只需使用如下函数:

def renumerate(data):
    ids = {}
    def getid(val):
        if val not in ids:
            ids[val] = len(ids) + 1
        return ids[val]
    return {k : map(getid, data[k]) for k in sorted(data.keys())}
例子
只需使用如下函数:

def renumerate(data):
    ids = {}
    def getid(val):
        if val not in ids:
            ids[val] = len(ids) + 1
        return ids[val]
    return {k : map(getid, data[k]) for k in sorted(data.keys())}
例子
如果您不担心内存或速度,可以使用中间字典映射新值:

a = {0: [31, 32, 58, 59], 1: [31, 32, 12, 13, 37, 38], 2: [12, 13]}
b = {}
c = {}

for key in sorted(a.keys()):
    c[key] = [b.setdefault(val, len(b)+1) for val in a[key]]

如果您不担心内存或速度,可以使用中间字典映射新值:

a = {0: [31, 32, 58, 59], 1: [31, 32, 12, 13, 37, 38], 2: [12, 13]}
b = {}
c = {}

for key in sorted(a.keys()):
    c[key] = [b.setdefault(val, len(b)+1) for val in a[key]]

如果您不担心内存或速度,可以使用中间字典映射新值:

a = {0: [31, 32, 58, 59], 1: [31, 32, 12, 13, 37, 38], 2: [12, 13]}
b = {}
c = {}

for key in sorted(a.keys()):
    c[key] = [b.setdefault(val, len(b)+1) for val in a[key]]

如果您不担心内存或速度,可以使用中间字典映射新值:

a = {0: [31, 32, 58, 59], 1: [31, 32, 12, 13, 37, 38], 2: [12, 13]}
b = {}
c = {}

for key in sorted(a.keys()):
    c[key] = [b.setdefault(val, len(b)+1) for val in a[key]]

请注意,字典是无序的,因此在处理另一个值列表之前先处理一个值列表是未定义的,除非您特意按顺序(例如按已排序键的顺序)处理它们。您的字典没有顺序。请注意,字典是无序的,因此,在处理另一个值列表之前先处理一个值列表是未定义的,除非您特意按顺序(例如按已排序键的顺序)处理它们,否则您的字典没有顺序。请注意,字典是无序的,因此,在处理另一个值列表之前先处理一个值列表是未定义的,除非您特意按顺序(例如按已排序键的顺序)处理它们,否则您的字典没有顺序。请注意,字典是无序的,因此,在处理另一个值列表之前先处理一个值列表是未定义的,除非您特意按顺序(例如按已排序键的顺序)处理它们,否则您的字典没有顺序。我会使用
b.setdefault(val,len(b))
但其他方式,很好。我会使用
b.setdefault(val,len(b))
但其他方式,很好。我会使用
b.setdefault(val,len(b))
但是其他的,很好。我会使用
b.setdefault(val,len(b))
但是其他的,很好。