【问题标题】:Get dictionary pairs for same items from a list从列表中获取相同项目的字典对
【发布时间】:2017-08-18 13:43:08
【问题描述】:

我想将列表中的相同项目(总是只有 2 个相同的项目)作为对保存到字典中。重复项不应出现在字典中。这是我的代码:

def find_pairs(list):
    dic = {}
    if list:
        for i, obj in enumerate(list, start=0):
            if obj not in dic:
                for k in xrange(i+1, len(list)):
                    if obj == list[k]:
                        dic[obj] = {list[k]}
    return dic

mylist = ["AE","E","W","B","D","C","AE","W","D","E","C","B"]
res = find_pairs(list)
print(res)  # {'W': {'W'}, 'E': {'E'}, 'C': {'C'}, 'D': {'D'}, 'B': {'B'}, 'AE': {'AE'}}

有更好的方法吗?

也许我对我想要做什么还不够清楚。事实上,我有一个对象标识符列表。使用此对象标识符,我可以访问将作为字符串返回的对象名称。现在我需要将字符串的某个扇区与列表中的另一个对象匹配的那些对象配对。正如我在这里所做的:

def find_pairs(list):
    dic = {}
    if list:
        for i, obj in enumerate(list, start=0):
            if obj not in dic:
                for k in xrange(i+1, len(list)):
                    if return_keyvalue(rs.ObjectName(obj), "_", 4) == return_keyvalue(rs.ObjectName(list[k]), "_", 4):
                        dic[obj] = list[k]
    return(dic)

我只是一个业余程序员,所以我很难以更聪明的方式实现它。

【问题讨论】:

  • 这似乎非常浪费......代码和最终结果。
  • 您可以将您的列表转换为一个集合(删除所有重复项)然后创建一个字典并将键/值设置为每个列表/集合项吗?
  • python 3 中也不包含 xrange,对吧?
  • 正确。 xrange 不包含在 Python 3 中
  • 我猜列表中也可以有一个或两个以上的出现?然后你可以使用keys = filter(lambda x: mylist.count(x) == 2, mylist)。否则,只需从您的列表中做一组。

标签: python python-2.7 list dictionary


【解决方案1】:

你可以使用collections.defaultdict:

from collections import defaultdict

d = defaultdict(set)
mylist = ["AE","E","W","B","D","C","AE","W","D","E","C","B"]
for i in mylist:
    d[i].add(i)

print(dict(d))

输出:

{'D': {'D'}, 'E': {'E'}, 'B': {'B'}, 'AE': {'AE'}, 'W': {'W'}, 'C': {'C'}}

或者,更短的方式:

d = {i:set(i) for i in mylist}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多