【问题标题】:How to create a dictionary with columns given as keys and values如何创建具有作为键和值的列的字典
【发布时间】:2014-12-25 23:06:58
【问题描述】:

好的,给我两列

A S

A T

A Z

B F

B G

B P

B U

C D

C P

C R

D M

E H

F S

H U

第一列是点列表,第二列是点的邻居列表。我想把它做成一本字典,这样 {A:'S','T','Z',B:'F','G','P'等}等等。

鉴于文本文件是两列,我尝试过这样做。

edges = open('romEdges.txt')

edgeslist = edges.read().split()

edgeskeys = edgeslist[::2]

edgesvalues = edgeslist[1::2]


dictionary = {}

for items in edgeskeys:

    dictionary[items]=[]

dictionary = OrderedDict(sorted(dictionary.items(), key=lambda t: t[0]))

for items in edgeskeys:

    if edgeskeys[items]==dictionary[items]:

        print()

print(dictionary)

我尝试过制作 2 个列表,1 个键和 1 个值,并尝试将它们与字典等进行比较,但我就是做错了!

必须有一个简单的方法。

请帮忙。

【问题讨论】:

    标签: python list dictionary key key-value


    【解决方案1】:

    对于只想从列创建一个简单字典而不需要重复键值的人来说,这应该可行:

     edges = open('romEdges.txt')
     dict = {line[:1]:line[1:] for line in edges}
     print dict
     edges.close()
    

    现在您的值中可能有一些空格或退格,然后您可以用空字符串替换():

     edges = open('romEdges.txt')
     dict = {line[:1]:line[1:].split()[0] for line in edges}
     print dict
     edges.close()
    

    如果您有多个列,并且您希望从以下列中列出该键值:

     edges = open('romEdges.txt')
     dict = {line[:1]:line[1:].split() for line in edges}
     print dict
     edges.close()
    

    【讨论】:

    • 我试过运行这个,但所有的键只有一个值,而其中一些应该有多个值。不过感谢您的努力。
    • 那么您知道如何以“正确”的方式进行操作吗?编辑:其他用户帮助。无论如何,谢谢!
    • 没问题,对于您的下一个问题,请查看没有 [0] 的我的第三个答案。我的解决方案的问题是,你必须附加列表,而你不能在单行字典生成器中做到这一点。我知道
    • 我将我的答案概括为一般来这里搜索这个问题的人
    • 所以你的意思是关于我在另一个答案上评论的 3 列的问题?编辑:哇谢谢!成功了!
    【解决方案2】:

    为什么不只是简单的逐行处理?

    f = open('romEdges.txt')
    dic = {}
    for l in f:
        k, v = l.split()
        if k in dic:
            dic[k].extend(v)
        else:
            dic[k] = [v]
    f.close()
    print dic
    

    输入的输出:

    {'A': ['S', 'T', 'Z'], 'C': ['D', 'P', 'R'], 'B': ['F', 'G', 'P', 'U'], 'E': ['H'], 'D': ['M'], 'F': ['S'], 'H': ['U']}
    

    【讨论】:

    • 'dict' 没有属性 'has_key'
    • 在这种情况下,请使用k in dic 而不是dic.has_key(k)
    • 是的,我现在就明白了。谢谢你的帮助。你的答案有效!
    • 如果给您 3 列,第 2 列和第 3 列是第 1 列的值,但这次第 1 列没有任何重复内容,您将如何做类似的事情?跨度>
    【解决方案3】:
    f = open('romEdges.txt')
    
    dic = {}
    

    对于 f 中的 l

    k, v = l.split('\t')
    dic.setdefault(k,[])
    if k in dic.keys():
        dic[k].extend([v.strip()])
    else:
        dic[k] =[v]
    f.close()
    
    print dic
    

    【讨论】:

      猜你喜欢
      • 2023-02-24
      • 2021-02-21
      • 2020-04-06
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2020-09-12
      相关资源
      最近更新 更多