Как сделать словарь с ключами из другого словаря и значения из файла CSV в Python? - PullRequest
0 голосов
/ 02 ноября 2018

Мне нужна помощь с заданием для Python. Задача состоит в том, чтобы создать словарь с ключами из другого словаря и значениями из CSV-файла. Все это нужно сделать с помощью функции с аргументами (другой словарь, the_csv_file)

Другой словарь выглядит так:

{1: 'Bob West', 2: 'Hannah North', 3: 'Bruce South', 4: 'Anna 
Bell', 5: 'George Smith'}

И я получил этот словарь из функции

def names_dictionary():
    with open("filename.csv", 'r') as d:
        x = {num+1:name.split(" ",1)[-1].strip() for (num, name) 
        in enumerate(d)}
    print(x)

Из этого словаря мне нужно, чтобы значения (имена) были ключами в новом словаре.

CSV-файл выглядит так в Excel

             A                         B

1.1 11
2.3 12
3.2 14
4.7 11
5.5 12

Все в столбце А.

Здесь я хочу, чтобы второе число в каждой строке было значением в новом словаре. Итак (11, 12, 14, 11, 12).

Словарь результатов, который я хочу получить, -

{’Bob West’: 11, ’Hannah North’: 12, ’Bruce South’: 14, ’Anna 
Bell’: 11, ’George Smith’: 12}

Функция пока.

def names(names_dictionary, csvfile):

И для конца мне нужна основная функция, которая собирает и выдает:

Боб Вест получил 11 бананов Ханна Норт получила 12 бананов Брюс Юг получил 14 бананов Анна Белл получила 11 бананов Джордж Смит получил 12 бананов

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

не уверен, хотите ли вы одну или две функции в конце. Здесь я оставил их как две отдельные функции.

import pandas as pd

#read in the file
csvfile = pd.read_csv(r'C:\Users\wrich\Desktop\data.csv')

#import the other dictionary
names_dictionary = {1: 'Bob West', 2: 'Hannah North', 3: 'Bruce South', 4: 'Anna Bell', 5: 'George Smith'}


def names(names_dictionary, csvfile):
    #manipulate the file to get the values you want
    csvfile = pd.DataFrame(csvfile['   A                        '].str.split(' ',1).tolist(), columns = ['id','value'])
    myValues = list(csvfile['value'])

    #output the result
    result = {}
    for entry in range(len(myValues)):
        result[names_dictionary[entry + 1]] = myValues[entry]

    return result

result = names(names_dictionary, csvfile)

def mainFunction(result):

    myString = ''

    for val in result.keys():

        myString += val + ' got ' + str(result[val]) + ' bananas '

    return myString

answer = mainFunction(result)
0 голосов
/ 02 ноября 2018

Как прочитать столбец из файла CSV уже рассматривается здесь .

Я предполагаю, что вы создали список colB со значениями [11, 12, 14, 11, 12]. Если d ваш исходный словарь, теперь вы можете использовать словарное понимание

{v:colB[k - 1] for k, v in d.items()}

для построения результата.

Демо-версия:

>>> d = {1: 'Bob West', 2: 'Hannah North', 3: 'Bruce South', 4: 'Anna Bell', 5: 'George Smith'}
>>> colB = [11, 12, 14, 11, 12]
>>> result = {v:colB[k - 1] for k, v in d.items()}
>>> result
{'Bob West': 11, 'Hannah North': 12, 'Bruce South': 14, 'Anna Bell': 11, 'George Smith': 12}

Я уверен, что вы сами разберетесь с печатью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...