我试图做到这一点,以便每当字典中的值是'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”继续。
答案 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版中进行了更改:保证字典顺序为插入顺序。