Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过转换从csv文件获取字典_Python_Csv_Dictionary - Fatal编程技术网

Python 通过转换从csv文件获取字典

Python 通过转换从csv文件获取字典,python,csv,dictionary,Python,Csv,Dictionary,我正在尝试将csv转换为dict,但无法获得正确的输出 基本上,我有一个csv文件,在第6列和第7列中包含整数,应该在dict中转换为“lat”和“lon” 这就是我正在尝试的: with open('secondhand_data.csv', 'rb') as f: reader = csv.reader(f, delimiter=';') output2['lon'] = {row[6] for row in reader} output2['lat'] = {row

我正在尝试将csv转换为dict,但无法获得正确的输出

基本上,我有一个csv文件,在第6列和第7列中包含整数,应该在dict中转换为“lat”和“lon”

这就是我正在尝试的:

with open('secondhand_data.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=';')
    output2['lon'] = {row[6] for row in reader}
    output2['lat'] = {row[7] for row in reader}
我的结果是:

{'lat': set([]), 'lon': set(['', '16.33052', '16.38002', '16.38414', '16.34794', '16.34797', '16.33351', '16.46922', '16.33353', '16.33367', '16.38552', '16.33354', '16.41716', ...])}
但我需要的恰恰是:

{'lat': ['53.1445116550943', '53.134787053494', '53.1383785260816', '53.330366', '55.8611098159417', ...], 'lon' : ['', '16.33052', '16.38002', '16.38414', '16.34794', '16.34797', '16.33351', ...]}
有人知道我做错了什么吗? 非常感谢

@雅各布劳:csv文件看起来像这样。。。有点乱,对不起

Waage, Deko/ Vintage/ Retro/ Nostalgie;http://www.willhaben.at/iad/kaufen-und-verkaufen/d/waage-deko-vintage-retro-nostalgie-208813335/;"
Doris S.";10;1030 Wien, 03. Bezirk, Landstraße; ;16.38575;48.19149;Fasangasse, Ecke Rennweg1030 Wien, 03. Bezirk, LandstraßeWien
schloss;http://www.willhaben.at/iad/kaufen-und-verkaufen/d/schloss-208789390/;"
Angelina";10;1100 Wien, 10. Bezirk, Favoriten; ;16.35809;48.17209;Hardtmuthgasse1100 Wien, 10. Bezirk, FavoritenWien
RC Boot;http://www.willhaben.at/iad/kaufen-und-verkaufen/d/rc-boot-208786703/;"
privat";15;1100 Wien, 10. Bezirk, Favoriten; ;;;
taschenmesser solingen dirlam & Sohn Söhne horn kleine beschädigung mit hülle;http://www.willhaben.at/iad/kaufen-und-verkaufen/d/taschenmesser-solingen-dirlam-sohn-soehne-horn-kleine-beschaedigung-mit-huelle-208768953/;"
rabe";25;1200 Wien, 20. Bezirk, Brigittenau; ;16.37349;48.23059;brigittenau1200 Wien, 20. Bezirk, BrigittenauWien
Konvolut Gama Norev Matchbox Lesney Corgi Wiking Schuco piccolo...14 teilig, alt, defekt;http://www.willhaben.at/iad/kaufen-und-verkaufen/d/konvolut-gama-norev-matchbox-lesney-corgi-wiking-schuco-piccolo-14-teilig-alt-defekt-208752031/;"
Peter";50;1190 Wien, 19. Bezirk, Döbling; ;16.35537;48.27574;Heiligenstädterstr.1190 Wien, 19. Bezirk, DöblingWien
DAS HAUS DER SCHWÄNE/ A. J. CRONIN, geb. Jubiläumsausgabe von 1934,;http://www.willhaben.at/iad/kaufen-und-verkaufen/d/das-haus-der-schwaene-a-j-cronin-geb-jubilaeumsausgabe-von-1934-208735636/;"
Annemarie";5;1230 Wien, 23. Bezirk, Liesing; ;16.28017;48.15508;Karl Schwed Gasse1230 Wien, 23. Bezirk, LiesingWien
Röhrenradio;http://www.willhaben.at/iad/kaufen-und-verkaufen/d/roehrenradio-208710345/;"

将集合理解替换为列表理解。而且,您的数据不一致。要处理这个问题,您应该将代码放在try-except大括号中,并检查非空值

import csv
with open('...', 'r') as f:
    reader = csv.reader(f, delimiter=';')
    output2 = { 'lat' : [], 'lon' : [] }
    for row in reader:
        try:
            if row[7] != '' and row[6] != '': 
                output2['lat'].append(row[7])
                output2['lon'].append(row[6])
        except:
            pass
print(output2)
输出:

{'lat': ['48.17209', '48.23059', '48.27574', '48.15508'], 'lon': ['16.35809', '16.37349', '16.35537', '16.28017']}

将集合理解替换为列表理解。而且,您的数据不一致。要处理这个问题,您应该将代码放在try-except大括号中,并检查非空值

import csv
with open('...', 'r') as f:
    reader = csv.reader(f, delimiter=';')
    output2 = { 'lat' : [], 'lon' : [] }
    for row in reader:
        try:
            if row[7] != '' and row[6] != '': 
                output2['lat'].append(row[7])
                output2['lon'].append(row[6])
        except:
            pass
print(output2)
输出:

{'lat': ['48.17209', '48.23059', '48.27574', '48.15508'], 'lon': ['16.35809', '16.37349', '16.35537', '16.28017']}

您正在使用集合理解并将集合附加到键。这个问题有三个方面:

1) 你两次浏览你的读者

2) 集合是无序的

3) 设置仅存储任何值的1个副本

试试这个:

output2 = {'lat': [], 'lon': []}
with open('secondhand_data.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        output2['lat'].append(row[7])
        output2['lon'].append(row[6])

您正在使用集合理解并将集合附加到键。这个问题有三个方面:

1) 你两次浏览你的读者

2) 集合是无序的

3) 设置仅存储任何值的1个副本

试试这个:

output2 = {'lat': [], 'lon': []}
with open('secondhand_data.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        output2['lat'].append(row[7])
        output2['lon'].append(row[6])

您可以这样做:

dct = {'lat': [], 'lon': []}
with open('secondhand_data.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        dct['lat'] += list(row[7])
        dct['lon'] += list(row[6])

您可以这样做:

dct = {'lat': [], 'lon': []}
with open('secondhand_data.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        dct['lat'] += list(row[7])
        dct['lon'] += list(row[6])


您可以发布csv或少量可用于复制结果的内容吗?为什么不使用
dictreader
?您的阅读器完全被
output2['lon']={row[6]for row in reader}
行所消耗。没有什么东西留给lat了。@stefan,很抱歉不清楚,但我当然考虑到了。你可以发布csv,或者一小部分可以用来复制你的结果吗?为什么不使用
dictreader
?你的阅读器完全被
output2['lon']={row[6]for row in reader}
行消耗掉了。除了第[6]行和第[7]行仍然正确之外,请参见.csv文件编辑,这仍然给了我:
{'lat':set([''48.1803','48.20549',…],'lon':set([''16.33052','16.38002',…])
,而不是
{'lat lat:[…],'lon:[]}
由于回答粗心而被否决。当他获得正确的逻辑性时,idices不会被取消一次。更糟糕的是,你延长了你的答案,声称一个迭代器被消耗了两次。我认为你的答案是可以的,加上一次小心editing@DamianLattenero谢谢你。我在这个网站上认真对待我的工作。而不好的评论不会消失好了,我至少可以自己做正确的事情,不提供错误信息。@stefan我不明白,Coldspeed回答有什么问题?具体是哪一行,为什么?因为“你的读者对象被完全消耗了”和“更糟糕的是,你扩展了你的答案,声称一个迭代器被消耗了两次”真的没有帮助…不要误会除了第[6]行和第[7]行仍然正确之外,请参见.csv文件编辑,这仍然给了我:
{'lat':set([''48.1803','48.20549','lon','lon':set([''16.33052','16.38002',…])
,而不是
{'lat:[…],'lon:[…]
由于回答粗心而被否决。当他获得正确的逻辑性时,idices不会被取消一次。更糟糕的是,你延长了你的答案,声称一个迭代器被消耗了两次。我认为你的答案是可以的,加上一次小心editing@DamianLattenero谢谢你。我在这个网站上认真对待我的工作。而不好的评论不会消失好了,我至少可以自己做正确的事情,不提供错误信息。@stefan我不明白,Coldspeed回答有什么问题?具体是哪一行,为什么?因为“你的读者对象被完全消耗了”和“更糟糕的是,你扩展了你的答案,声称一个迭代器被消耗了两次”真的没有帮助…不要误会这会不会导致每个键都包含一个只包含最后一行的列值的列表?@AlanLeuthard是的,你是对的!我现在就编辑,我的坏hahaSo,哪种方法更有效地添加到列表?使用+运算符,还是使用append/extend?@AlanLeuthard我搜索过,append快了两倍,:)看这里,我认为现在你的答案更好了哈哈,再加上一个,这会不会简单地导致每个键都包含一个列表,其中只包含最后一行的列值?@AlanLeuthard是的,你是对的!我现在就编辑,我的坏hahaSo,哪一个更有效地添加到列表?使用+运算符,还是使用append/extend?@AlanL我搜索了euthard,append快了两倍,:)看这里,我想现在你的答案更好了哈哈,再加上一个