如何从列表中为字典分配键?

时间:2013-10-13 21:42:32

标签: python dictionary

我必须使用字典编写一个方法,该字典采用列表a并返回包含a元素的列表,该列表出现一次,元素应按与第一个相同的顺序出现发生在a。我认为正确的方向?这是我的代码:

def only_once(a):
    d = {}
    for i in a:
        d['value'] = i
    m = range(len(a))
    for num in m:
        d['key'] = num
    return d.value  

如何从列表a中获取元素并创建值?

3 个答案:

答案 0 :(得分:2)

itertools执行此任务recipe

def unique_everseen(iterable, key=None):
    "List unique elements, preserving order. Remember all elements ever seen."
    # unique_everseen('AAAABBBCCDAABBB') --> A B C D
    # unique_everseen('ABBCcAD', str.lower) --> A B C D
    seen = set()
    seen_add = seen.add
    if key is None:
        for element in ifilterfalse(seen.__contains__, iterable):
            seen_add(element)
            yield element
    else:
        for element in iterable:
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element

顺便说一句,既然您希望订单相同,那么字典在这里就无济于事了。 dict不保留任何订单。

答案 1 :(得分:0)

这是一个天真的解决方案。它几乎使用dict作为set,这很愚蠢,因为python有集合。但是嘿。

def only_once(a):
  d = {}
  for i in a:
    d.setdefault(i,0)
    d[i] += 1
  return [i for i in a if d[i] == 1]

答案 2 :(得分:0)

这是我的解决方案,使用dict理解并按相应的值排序dict键:

def only_once(a):
   # create the dictionary using dict comprehension;
   # add to the dictionary only if the number of occurences
   # equals one
   d = {x:a.index(x) for x in a if a.count(x) == 1}

   # retrieve the dictionary keys as list and sort them by the value
   # of their assigned dictionary values
   return sorted(d.keys(), key = d.get)

但我同意dict并不是解决这个问题的最幸运的数据结构选择。