遍历字典更新Fly Python3上的值

时间:2019-09-17 18:45:36

标签: python dictionary iteration

我试图做到这一点,以便每当字典中的值是'A9'时,'A9'之后的key:value对就变成'a0',并再次遍历直到'a9',然后我要更改为“ B0”,等等。

我的预期输出:

{'0000': 'A0', '0001': 'A1', '0002': 'A2', '0003': 'A3', '0004': 'A4', '0005': 'A5', '0006': 'A6', '0007': 'A7', '0008': 'A8', '0009': 'A9', '0010': 'a0', '0011': 'a1', '0012': 'a2', '0013': 'a3', '0014': 'a4', '0015': 'a5', '0016': 'a6', '0017': 'a7', '0018': 'a8', '0019': 'a9', '0020':'B0', '0021':'B1'}

我当前的代码:

ustr = (['%.4d' % i for i in range(0, 22)])
d2 = {x:f'A{i+0}' for i, x in enumerate(sorted(set(ustr)))}
print(d2)
for k, v in d2.items():
    print(v)
    if v == 'A9':
        v = {x:f'a{i+0}' for i, x in enumerate(sorted(set(ustr)))}
        print(v)

我收到的此输出将覆盖我的字典。我知道为什么。我告诉if语句用'a0'替换字符串的所有值。我只是不知道如何编写代码来指定在“ A9”之后以“ a0”继续。

2 个答案:

答案 0 :(得分:1)

您是否正在尝试做这样的事情?

input_dict = {'0000': 'A0', '0001': 'A1', '0002': 'A2', '0003': 'A3', '0004': 'A4', '0005': 'A5', '0006': 'A6', '0007': 'A7', '0008': 'A8', '0009': 'A9', '0010': 'a0', '0011': 'a1', '0012': 'a2', '0013': 'a3', '0014': 'a4', '0015': 'a5', '0016': 'a6', '0017': 'a7', '0018': 'a8', '0019': 'a9', '0020':'B0', '0021':'B1'}

alphabet = ['A', 'B', 'C', 'D', 'E', "..."]
numbers = range(10)

dict(zip(input_dict.keys(), [f"{letter}{num}" for letter in alphabet for num in numbers]))

输出:

>>>
{'0000': 'A0',
 '0001': 'A1',
 '0002': 'A2',
 '0003': 'A3',
 '0004': 'A4',
 '0005': 'A5',
 '0006': 'A6',
 '0007': 'A7',
 '0008': 'A8',
 '0009': 'A9',
 '0010': 'B0',
 '0011': 'B1',
 '0012': 'B2',
 '0013': 'B3',
 '0014': 'B4',
 '0015': 'B5',
 '0016': 'B6',
 '0017': 'B7',
 '0018': 'B8',
 '0019': 'B9',
 '0020': 'C0',
 '0021': 'C1'}

您可以很容易地在开头添加A的额外行。但我不确定您是否要输入错字或错字。

答案 1 :(得分:0)

Python字典是无序的,因此没有特定键之前或之后的概念。

<罢工> 创建{x:f'a{i+0}' for i, x in enumerate(sorted(set(ustr)))}后,对dict进行的排序将无效。

也许考虑使用OrderedDict(在标准库中)。

<罢工> 注意:特定的Python实现(或版本)可能会保持迭代顺序,但在语言规范中不予保证。

显然,有一个从Python 3.7开始的保证订单:

  

iter(dictview)

     

[...]

     

在3.7版中进行了更改:保证字典顺序为插入顺序。