我需要创建一个字典,我可以在其中分配一个值,该值对列表中的同一个对象进行分类。请注意,我没有预先存在的值,我希望python指定一个。这就是我所拥有的:
In [38]: post_title_list
Out[38]: [u'the rfe master list',
u'the rfe master list',
u'the rfe master list',
...]
rfe主列表会持续大约700次,直到我们开始下一个标题,这是你的问题'。我想为列表中的每个新短语分配一个数字,因此rfe主列表被指定为1,直到我们得到将被分配2的co问题,依此类推。
我试过以下代码但没有运气:
In [39]: d = dict(zip(post_title_list, range(len(post_title_list)))
Out[39]: {u'the rfe master list': '491818'}
In [40]: {item: str(i) for i, item in enumerate(post_title_list)}
Out[40]: {u'the rfe master list': '491818'}
In [41]: dict.fromkeys(post_title_list)
Out[41]: {u'the rfe master list': None}
期望的输出:
Out[42]: {u'the rfe master list': 1,
u'the rfe master list': 1,
u'the rfe master list': 1,
u'the co problem' : 2,
u'the co problem' : 2,
u'expecting delays' : 3,
u'denied help : 4,
...}
谢谢。
答案 0 :(得分:1)
正如您在问题的评论中已经指出的那样,您不能在字典中为同一个键创建多个条目。
一种方法是使用一个字典,其中每个标题只出现一次并映射到相应的数字:
d = {}
next_id = 1
for title in post_title_list:
if title not in d:
d[title] = next_id
next_id += 1
或者,您可以为列表中的每个元素创建一个包含元组(title,id)
的列表:
l = []
next_id = 0
last = None
for title in post_title_list:
if title != last:
next_id += 1
l.append((title,next_id))
last = title
答案 1 :(得分:1)
如评论中所述,词典需要具有唯一键。所以我建议一个元组列表。 为了生成所需输出的类似形式,我建议如下:
ctr = 1
l = [
'a',
'a',
'a',
'a',
'a',
'a',
'a',
'a',
'b',
'b',
'b',
'b',
'b',
'b',
'c',
'c',
'c',
'c',
'c',
]
out = []
for idx, element in enumerate(l):
if idx == 0:
out.append((element, ctr))
else:
if element != l[idx-1]:
ctr = ctr + 1
out.append((element, ctr))
print(out)
给
[('a', 1),
('a', 1),
('a', 1),
('a', 1),
('a', 1),
('a', 1),
('a', 1),
('a', 1),
('b', 2),
('b', 2),
('b', 2),
('b', 2),
('b', 2),
('b', 2),
('c', 3),
('c', 3),
('c', 3),
('c', 3),
('c', 3)]
由于评论而更新
打印列表的方式取决于您使用的开发环境。但是,为了拥有独立于IDE的东西,这应该是工作:
for t in out:
print(t)