Словарь Python должен возвращать значение, а не None - PullRequest
0 голосов
/ 03 октября 2019

У меня есть CSV-файл, который состоит из a,b 2,3 4,5 4,7 4,7 (где a, b - значения столбца) Ниже у меня есть две функции, где первая функция будет читать CSV и назначать «a» в качестве ключа и «b» в качестве значения всловарь

Вторая функция i передает значение «a» в качестве аргумента и возвращает b в качестве значения, когда я использую эту функцию. Если нет значения для «a», я получаю None.

def x (id):
    dict1= {}
    with open(file, 'r', encoding='utf') as f:
        for i in csv.DictReader(f, skipinitialspace= True)
        dict1[i['a']] = row['b']
    print('im happy now' )



def getx (a):
    return dict1.get(a, None)

Работает отлично.

Теперь у меня есть CSV-файл с четырьмя значениями столбцов

a,b,c,d
1,2,r,4
2,g,4,6
3,d,4,6

Для этого я написал код, подобный

def x ():
    dict1= {}
    with open(file, 'r', encoding='utf') as f:
        for i in csv.DictReader(f, skipinitialspace= True)
        dict1[i['a']] = dict(dict1[i['b']] = dict(dict1[i['c']] = row['d']))
    print('im happy now' )



def getx (a):
    return dict1.get(dict1['a']['b']['c'], None)

Моя логика состоит в том, чтобы показать

dict1[i['a']] = dict(dict1[i['b']] = dict(dict1[i['c']] = row['d']))

как

dict1 :{
   'a':{
       'b':{
           'c':2,
           'c':4,
           'c':4
       }
   }
}

Я не уверен, правильно ли написанное выше.

Мне нужно вернуть 'd 'как значение, когда я передаю dict1 [a [] b] [c]. Он возвращает мне пустое значение.

Ожидаемое значение для комбинации a, b, ci нужно значение как d.

Например, из вышеуказанного csv. Для комбинации 1, 2, при возврате нужно вернуть 4

Обновление:

Я понял, что столбец 'a' имеет повторяющиеся значения и его нельзя обрабатывать в словарных ключах, которые пропускают запись дублирующегося ключа.

from collections import defaultdict

dict_1 = defaultdict(list)

with open('file.txt','r') as f:
    for r in f.readline():
        i= r['a']
        j= r['b']
        k= r['c']
        l =r['d']
        details = [j,k,l]
        dict_1[i].append((details))
        print(dict_1)

, что дает мне

{'1' :[('k', '3', '5'),('e','3','2')], '4' :[('r','3','2'),('e','2','1')],....................}

Если у меня есть dict_1 в моей первой функции, как указано выше. Теперь любые предложения, например, как я могу получить значение 'd', передав a, b, c в качестве аргумента во вторую функцию, иначе NONE?

1 Ответ

1 голос
/ 03 октября 2019

Вам не нужен модуль CSV для этого. Кроме того, вы не можете иметь дубликаты ключей в словаре, вы просто перезаписываете ранее установленные значения.

def x():
    dict1= {}
    with open(file, 'r', encoding='utf') as f:
        for i in f.readlines():
            a, b, c, d = i.split(',')
            dict1[a] = {b: {c: d}}

def getx(a, b, c):
    try:
        return dict1[a][b][c]
    except:
        return None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...