如何创建目录以将值分配给列表中的类似项目。

时间:2016-09-19 17:52:55

标签: python dictionary

我需要创建一个字典,我可以在其中分配一个值,该值对列表中的同一个对象进行分类。请注意,我没有预先存在的值,我希望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,
             ...}

谢谢。

2 个答案:

答案 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)