2014-10-30 25 views
0

确定是一个点的列表,第二列是的邻居列表点。我想把它做成一本字典,这样就可以得到这样一个字典,例如:A:'S','T','Z',B:'F','G','P'等等。如何创建给出键列的字典,所以我给出的两列</p> <pre><code>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 </code></pre> <p>第1列的值

我试过的是这样做的,因为文本文件是两列。

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,并试图比较它们的字典,等,我只是无法得到它的权利!

有一个简单的方法。

请帮忙。

+0

请人? – CyanogenCX 2014-10-30 02:39:57

回答

1

对于谁只是想创建colums简单的字典没有重复键值人来说,这应该工作:

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() 

如果你有多个colums,并希望有一个列表了以下colums该键值的:

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

我试着运行这个,但所有的键只有一个值,而其中一些应该有多个值。感谢您的努力。 – CyanogenCX 2014-10-30 02:58:40

+0

那么你知道如何做到“正确”吗?编辑:其他用户帮助。无论如何感谢 ! – CyanogenCX 2014-10-30 03:06:13

+0

没问题,为你的下一个问题看看我的第三个答案没有[0]。我的解决方案的问题是,你不得不追加列表,你不能在oneline dict生成器中做到这一点。我知道 – muthan 2014-10-30 03:21:14

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']} 
+0

'dict'没有属性'has_key' – CyanogenCX 2014-10-30 02:59:38

+0

在这种情况下,使用'dic'而不是'dic.has_key(k)'。 – hushaohan 2014-10-30 03:06:03

+0

是的,我现在明白了这一点。谢谢你的帮助。你的答案有效! – CyanogenCX 2014-10-30 03:08:01

0
f = open('romEdges.txt') 

dic = {} 

˚F

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 
相关问题