2016-05-28 5 views
2
def makeDict(filename): 
    with open(filename,"r") as f: 
     dict_={} 
     for line in f: 
      (key,value1,value2)=line.split() 
      dict_[key]=[(float(value1),float(value2))] 

mylist=[] 
for value1 in dict_: 
    if number < value1 < number: 
     mylist.append(key) 

Последний вопрос, и я должен сделать это. Оказывается, что мои ценности по-прежнему не выходит, как поплавки, потому что я пытаюсь проверить, если значение находится в пределах от 2-х номеров и я получаю эту ошибкусоздание словаря из текстового файла 2 значения

TypeError: unorderable types: int() < str()

newDict=makeDict("file.txt") 
    >>> testdict(500,530,newDict) 

    line 28, in testdict 
    for k,v in newDict.iteritems(): 
AttributeError: 'dict' object has no attribute 'iteritems' 
+1

могли бы вы предоставить полную отслеживающий ошибки? –

+1

Введенный вами код имеет ошибки ввода в цикле for. – andrew

+0

в коде, который вы вставили, нет печати (d) .. является переменной 'd' вне области видимости и не существует в функции, из которой вы ее вызываете? пожалуйста, напишите весь код .. – minocha

ответ

0
def makedict(filename): 
    filename=open(filename,"r") 
    d={} 
    for line in filename: 
     (key,value1,value2)=line.split() 
      d[key]=(float(value1),float(value2)) 
1

Используйте функцию float() конвертировать ваши значения для чисел с плавающей запятой.

Кроме того, вы должны close() файл после работы с ним, или обернуть свой код в with блок (который закроет для вас файл):

def makedict(filename): 
    with open(filename,"r") as f: 
     d={} 
     for line in f: 
      (key,value1,value2)=line.split() 
      d[key]=(float(value1),float(value2)) 
    return d 

Наконец, не следует использовать в качестве dict имя переменной, поскольку оно уже существует как встроенное. Используйте dict_ вместо (или другое имя в целом):

dict_ = makeDict["file.txt"] 

EDIT

Возьмите это с зерном соли, так как это только предположение на основе информации в вашем вопросе, но вы хотите изменить это:

for value in dict_: 
    if number < value1 < number: 
     mylist.append(key) 

к этому:

for k, v in dict_.items(): 
    if number < v[0] < number: 
     mylist.append(k) 
+0

так что все, что мне нужно сделать, чтобы превратить их в словарь? – frank

+0

Yup. Если вы столкнулись с ошибкой, просто отредактируйте свой пост выше для получения дополнительной справки. – Daniel

+0

им просто любопытно, есть ли способ печати (d) просто проверить или что-нибудь cuz все, что ive попытался в конце концов сказать, что d не определено – frank

0

Используйте это:

def makedict(fname): 
    filename=open(fname,"r") 
    d={} 
    for line in filename: 
     (key,value1,value2)=line.split() 
     d[key]=[(value1),(value2)] 
    print(d) ## print the dictionary 

Здесь вы сохраняете значения в виде списка.

Например:

Файл -

A B C 
1 2 E 
3 4 E 
5 6 E 
7 8 E 

Выход (словарь) -

{'3': ['4', 'E'], '7': ['8', 'E'], 'A': ['B', 'C'], '5': ['6', 'E'], '1': ['2', 'E']} 

Здесь A,1,3,.. ключи и ['B', 'C'], ['2', 'E'], .. являются соответствующие значения.

2

Ваша функция makeDict не возвращает значение.

def makeDict(filename): 
    with open(filename,"r") as f: 
     d={} 
     for line in f: 
      (key,value1,value2)=line.split() 
      d[key]=[(float(value1),float(value2))] 
    # Return the dictionary 
    return d 

EDIT

Проблема в коде, что, когда вы перебирать словарь только с одним значением, в данном случае value1, он будет повторять только через ключи. То, что вы хотите, чтобы перебирать значения, которые могут быть выполнены с помощью метода .values()

def makeDict(filename): 
    with open(filename,"r") as f: 
     dict_={} 
     for line in f: 
      (key,value1,value2)=line.split() 
      dict_[key]=[(float(value1),float(value2))] 

mylist=[] 
# Iterate through the values instead 
for value1 in dict_.values(): 
    if number < value1 < number: 
     mylist.append(key) 

Последней ошибки, что вы, вероятно, вызваны версией Python, которую вы используете. См. this post.

In Py3.x, things are more clean, since there are only dict.items(), dict.keys() and dict.values() available, which return the view objects just as dict.viewitems() in Py2.x did.

Таким образом, вы должны изменить код в testdict к for k, v in newDict.items():

Смежные вопросы