如何使用Python中其他字典的键和csv文件中的值制作字典?

时间:2018-11-02 13:45:00

标签: python python-3.x csv dictionary

我需要一些有关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

A列中的所有内容。

从这里开始,我希望每行中的第二个数字成为新字典中的值。所以(11,12,14,11,11,12)。

我想要的结果字典是

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

到目前为止的功能。

def names(names_dictionary, csvfile):

最后,我需要一个主要功能,将其放在一起并输出:

鲍勃·韦斯特(Bob West)有11根香蕉 汉娜·诺特(Hannah North)有12根香蕉 布鲁斯·南(Bruce South)得到了14根香蕉 安娜·贝尔(Anna Bell)有11根香蕉 乔治·史密斯(George Smith)有12根香蕉

2 个答案:

答案 0 :(得分:0)

here中已经介绍了如何从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}

我确定您会自己弄清楚打印的。

答案 1 :(得分:0)

不确定到底要不要一个或两个功能。在这里,我将它们留作两个独立的功能。

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)