【问题标题】:Iteration variable inside the generator dictionary生成器字典中的迭代变量
【发布时间】:2017-03-02 13:37:09
【问题描述】:

美好的一天! 有一个关于python中生成器字典内部迭代的问题:

sort_dict = {select_keys: {rows: {j: item for item in self.csv_dict.values() if item.get(select_keys) == rows} for rows in keys}}

有必要将变量j 增加,直到它 vyrozhenie 数据被记录:

for item in self.csv_dict.values () if item.get (select_keys) == rows}

我是 python 新手,所以我为这个愚蠢的问题道歉。我为这个琐碎的问题争论了很长时间,但它应该执行 - 因为这个问题需要现在提出。

有一个类处理穿孔文件csv:

`导入csv

类 CSV():

def __init__(self, file_path):
    super().__init__()
    self.file_path = file_path
    self.csv_dict = {}

"""Данный метод парсит переданный в класс CSV файл"""
def parseeCSV(self):
    print('\n')
    self.getDictCSV()
    print(self.getListKeysCSV())
    unic_key = self.getUnicValFromCustomKeys('zip')
    sort_csv = self.getCsvSortForKeys(unic_key, 'zip')

"""Данный метод создает словарь из переданного в класс CSV файла
Словарь вида {Номер строки(записи){строка(запись)}}
"""
def getDictCSV(self):
    i = 0
    with open(self.file_path, 'r') as csv_desctiptor:
        csv_obj = csv.DictReader(csv_desctiptor)
        for csv_dict in csv_obj:
            self.csv_dict[i] = csv_dict
            i = i + 1
    del csv_desctiptor
    return True

"""Данный метод возвращает все ключи из словаря self.csv_dict[0]"""
def getListKeysCSV(self):
    return dict.keys(self.csv_dict[0])

"""Данный метод возвращает уникальные значения по выбранным полям"""
def getUnicValFromCustomKeys(self, keys):
    i = 0
    val_key = {}
    while i < len(self.csv_dict):
        val_key[i] = self.csv_dict[i].get(keys)
        unic_val_key = set(val_key.values())
        i = i + 1
    return unic_val_key

def getCsvSortForKeys(self, keys, select_keys):
    #sort_dict = {select_keys: {rows: '' for rows in keys}}
    i = 0`

解析CSV类型的文件:

street,city,zip,state,beds,baths,sq__ft,type,sale_date,price,latitude,longitude 3526 HIGH ST,SACRAMENTO,95838,CA,2,1,836,Residential,Wed May 21 00:00:00 EDT 2008,59222,38.631913,-121.434879

同时他还要做Dictionary类型:

csv_dict[key_select][key_select_val][num-element][element_csv_string]

例如:csv_dict['zip']['95838'][1][3526 HIGH ST,SACRAMENTO,95838,CA,2,1,836,Residential,Wed May 21 00:00:00 EDT 2008,59222,38.631913,-121.434879

提前致谢,对于愚蠢的问题,我深表歉意。

【问题讨论】:

  • 什么是jj 应该如何像0..n 一样递增,或者是否有任何特定的递增。
  • 我不太明白你的问题,但你或许可以使用enumerate 来生成j 值。
  • @SSj.Luffy J - 这是通常的整数类型变量。在每次迭代中,它应该增加 1,并且一旦行字典项中的所有贡献都运行以取值 0,然后重新开始
  • @PM2Ring 我只需要增加J,正如我之前所说的。问题是我事先不知道J应该增加多少。它的最终值可能是5或10,具体取决于满足item的元素数量@

标签: python dictionary iterator


【解决方案1】:

请解释一下你的问题。

我无法在您的代码中收集对 j 的任何引用。而且代码似乎构造错误。

sort_dict = {select_keys: {rows: 
    {j: item for j,item in enumerate(self.csv_dict.values()) 
        if item.get(select_keys) == rows} for rows in keys}}

希望有帮助!

【讨论】:

  • 有一个类处理穿孔文件csv:
  • sort_dict = {select_keys: {rows: {j: item for j, item in enumerate(self.csv_dict.values()) if item.get(select_keys) == rows} 键中的行}}
  • 对不起,我是第一次上stackoverflow。我通过扩展主题回答了您的问题
  • 谢谢 - 就像 J 的问题已解决,但数组重复:sort_dict = {select_keys: {rows: {j: item for j,item in enumerate(self.csv_dict.values()) if item.get(select_keys) == rows} for rows in keys}} for roww in keys: print(sort_dict[select_keys].keys()) 结果:dict_keys(['95663', '95747', '95835'....]) dict_keys(['95663', '95747', '95835'...])
  • 我很抱歉。问题解决了。太感谢了。重复问题是我的疏忽造成的。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2020-07-11
  • 2021-03-27
  • 1970-01-01
  • 2020-01-18
  • 2021-02-02
  • 1970-01-01
相关资源
最近更新 更多