【发布时间】:2021-10-22 13:33:03
【问题描述】:
我正在尝试创建一个列表,其中包含基于另一个子列表列表中的元素的字典中的键子列表(数据如下)。
我有一个函数试图遵循这个逻辑:
- 查看子列表中的元素是否与字典中的任何精确值匹配
- 如果是,则将关联的字典键附加到新列表中的子列表中
- 如果不是,请尝试将元素转换为整数并将其附加到新列表中的子列表中
- 如果这不起作用,请将整个子列表附加到一个全新的列表中
- 返回包含从原始文件中的字符串转换而来的整数子列表的列表以及包含无法转换的子列表的列表
我希望逻辑是有道理的。感谢这个问题 (Replacing elements in a sublist with keys from a dictionary based on matches with dictionary values) 以前版本中的一些 cmets,我已经编辑了代码和字典,所以 re.search 函数现在可以工作了。下面是新代码:
import re
def conversion(d, file):
key_list = list(d.keys())
for i in range(0, 21):
for j in file:
for k in j:
good1 = []
good1a = []
good2 = []
good2a = []
bad1 = []
bad2 = []
if k == d[i]:
good1a.append(key_list[i])
good1.append(good1a)
if isinstance(int(k), int):
if int(k) <= 20:
good2a.append(int(k))
good2.append(good2a)
else:
bad1.append(j)
else:
bad2.append(j)
list1 = []
list2 = []
list1.append(good1)
list1.append(good2)
list2.append(bad1)
list2.append(bad2)
return list1, list2
但是,这不是我期望的输出:
([[], []], [[], []])
这可能与我的列表的放置或类似的东西有关,但我对 python 真的很陌生,我还没有遵循事情应该去哪里的逻辑。
任何帮助将不胜感激!
非常感谢,
卡罗来纳
数据:
d = {0: "zero, null",
1: "one, un, eins",
2: "two, deux, zwei",
3: "three, trois, drei",
4: "four, quatre, vier",
5: "five, cinq, funf",
6: "six, sechs",
7: "seven, sept, sieben",
8: "eight, huit, acht",
9: "nine, neuf, neun",
10: "ten, dix, zehn",
11: "eleven, onze, elf",
12: "twelve, douze, zwolf",
13: "thirteen, treize, dreizehn",
14: "fourteen, quatorze, vierzehn",
15: "fifteen, quinze, funfzehn",
16: "sixteen, seize, sechzehn",
17: "seventeen, dix-sept, siebzehn",
18: "eighteen, dix-huit, achtzehn",
19: "nineteen, dix-neuf, neunzehn",
20: "twenty, vingt, zwanzig"}
file = [['16', '10', '8', '3', '7'], ['8', '9', '19', '20', '4'], ['sechs', 'acht', 'sechzehn', 'funf', 'null'], ['1', '30', '2', '5', '7'], ['vierzehn', 'eins', 'zwei', 'neun', 'drei'], ['six', 'neuf', 'seize', 'zero'], ['fourteen', 'eleven', 'forteen', 'eight', 'twenty'], ['douze', 'onze', 'huit', 'quinze', 'sept'], ['18', '9', '9', '22', '4'], ['un', 'trois', 'quatorze', 'dix-huit', 'vingt'], ['five', 'three', 'nineteen', 'twenty', 'zero'], ['einundzwanzig', 'vierzehn', 'eins', 'zwei', 'vier']]
【问题讨论】:
标签: python regex dictionary for-loop if-statement