我是python的新手并尝试将Set转换为Dictionary。我正在努力寻找一种方法来实现这一目标。任何输入都受到高度赞赏。感谢。
Input : {'1438789225', '1438789230'}
Output : {'1438789225':1, '1438789230':2}
答案 0 :(得分:3)
使用enumerate()
生成一个从0开始的值,并为字典中的每个项目向上计数,然后分析它:
input_set = {'1438789225', '1438789230'}
output_dict = {item:val for val,item in enumerate(input_set)}
或传统的循环:
output_dict = {}
for val,item in enumerate(input_set):
output_dict[item] = val
如果您希望它从1而不是0开始,则对第一个代码段使用item:val+1
,为第二个代码段使用output_dict[item] = val+1
。
那就是说,这本词典与list
:
output = list(input_set)
答案 1 :(得分:2)
我的单行:
output = dict(zip(input_set, range(1, len(s) + 1)))
zip
逐个元素(l1[0] + l2[0] + l1[1] + l2[1] + ...
)混合两个列表(或集合)。
我们正在为它提供两件事:
输出是一个像[('1438789225', 1), ('1438789230', 2)]
这样的元组列表,只需将它转换为dict构造函数即可转换为dict ... dict
。
但是像TigerhawkT3说的那样,我很难找到这样一本字典的用法。但如果你有自己的动机,那么你还有另一种方法。如果你从这篇文章中删除了任何内容,那就是存在zip
。
答案 2 :(得分:0)
我的Python非常生疏,但应该这样做:
def indexedDict(oldSet):
dic = {}
for elem,n in zip(oldSet, range(len(oldSet)):
dic[elem] = n
return dic
如果我写了任何非法的东西,请告诉我,我会解决它。我没有方便的口译员。
基本上,我只是使用范围对象(基本上是一个连续的数字列表,但效率更高)来压缩列表,然后使用生成的元组。 我得到了老虎的答案,这基本上是他的一个更天真的版本。
答案 3 :(得分:0)
一种简单的方法是迭代集合,并使用计数器作为字典键,逐个元素地填充结果字典:
import