我有一个不同长度的数字和字符串列表。我想生成一个字典,将每个数字映射到具有该长度的字符串,如果它们没有一对,则丢弃数字和字符串。
py_list = ['1', '##', '2', '#', '3', '####', '4', '###', '5', '######']
py_dict = {'1': '#', '2': '##', '3': '###', '4': "####"}
这是我到目前为止所尝试的:
我知道这不是最有效的解决方案。有什么更好的方法呢?
答案 0 :(得分:4)
您可以使用dictionary comprehensions作为
>>> { str(len(x)) : x for x in py_list if not x.isdigit() and str(len(x)) in py_list }
{'1': '#', '3': '###', '2': '##', '4': '####'}
答案 1 :(得分:2)
O(n)解决方案:
s=set(int(x) for x in py_list[::2]).intersection(len(x) for x in py_list[1::2])
d={str(x) : '#'*x for x in s}
# {1: '#', 2: '##', 3: '###', 4: '####'}
答案 2 :(得分:1)
您可以尝试以下方法:
py_list = ['1', '##', '2', '#', '3', '####', '4', '###', '5', '######']
h = lambda l: '#'*l
dict_with_matching_hashes = dict([(x, h(int(x))) for x in py_list if x.isdigit() and h(int(x)) in py_list])
print(dict_with_matching_hashes)
这会给你以下结果:
{' 2':' ##',' 1':'#',' 4&#39 ;:' ####',' 3':' ###'}