尝试按列表中的字符串创建新变量

时间:2016-10-07 18:47:57

标签: python list csv variables

为此,我一直在搜索互联网的终点,我很清楚我想要做的是多么沮丧。我只是想不出另一种方法来实现我想要的。 现在,就我的实际问题而言,我获得了一份包含警察枪击信息的csv。该文件包含案例的状态,旁边是城市。我希望从csv中记录的每个州名称变量,并将它们转换为列表,其内容是该州的城市。我已经阅读了一些关于全局变量的东西,但我只是想知道去哪里。我正在使用的语言是python。

编辑:根据要求,这里是数据的格式和我当前的代码:

国家|城

华盛顿|西雅图

加州|洛杉矶

华盛顿|柯克兰

PVC = open("PoliceViolence_city.csv", "r", errors="ignore");
KBP = open("KilledByPolice.csv", "r", errors="ignore");

def start(dparse, dparse2):
    cur = [];
    cur2 = [];
    for aa in dparse:
        cur.append(aa);
    for ab in dparse2:
        cur2.append(ab);
    del cur2[0];
    del cur[0];
    for ba in range(len(cur)):
        cur[ba] = cur[ba].split(",");
    sortloc(cur);
    for bb in range(len(cur2)):
        cur2[bb] = cur2[bb].split(",");


def sortloc(dp):
    merge = [];
    state = [];
    city = [];
    s2 = [];
    for a in range(len(dp)):
        if dp[a][0] not in state:
            state.append(dp[a][0]);
        city.append(dp[a][1]);
        s2.append(dp[a][0]);
    for ba in range(len(city)):
        for bb in range(len(state)):
            if s2[ba] == state[bb]:
                print("Matched stuff!");



start(PVC, KBP);

理想情况下,我的输出将是:华盛顿= [“西雅图”,“柯克兰”]。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

使用csv.readercollections.defaultdict

import csv
import collections
with open('states.csv') as f:
    result = collections.defaultdict(list)
    reader = csv.reader(f)
    for state,city in reader:
        result[state].append(city)

文件:

CA,San Francisco
CA,Sacramento
CA,San Francisco
Idaho,Boise
New York,New York City

结果:

>>> import pprint
>>> pprint.pprint(result)
{'CA': ['San Francisco', 'Sacramento', 'San Francisco'],
 'Idaho': ['Boise'],
 'New York': ['New York City']}

答案 1 :(得分:0)

可以使用eval(),但你应该真的不这样做......一个更加结构化和安全的方式来完成你的任务就是获取州名和把它作为字典中的一个键:

txt = '''state1, city1
state2, city2
state2, city3
state3, city4
state3, city4'''

states = {}
for line in txt.split('\n'):
    state, city = line.split(', ')
    if state not in states:
        states[state] = [] #create an empty list to hold all cities in a state
    if city not in states[state]: #don't put the same city in twice
        states[state].append(city) #insert the city into the list


#resulting structure:
#states = {
#    'state1': ['city1'],
#    'state2': ['city2', 'city3'],
#    'state3': ['city4']
#}

答案 2 :(得分:0)

是时候结束了。我的朋友通过向我介绍字典来帮助我。格式化适合我的数据,我已经将所有州的状态都归属于各自的城市。谢谢大家的帮助!而furas'答案对我所需要的是正确的,它不是非常明确的解释,所以我认为最有帮助的是Aaron,因为他不顾一切地试图帮助我理解。希望你们都有一个好人!