将密钥复制到新字典(Python)

2024-04-26 12:07:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用DictReader()读取csv文件。函数返回一个字典,其中标题项是键,单元格是值。很酷。

但我试图解释数据可能不是我期望的那样的行。在这种情况下(我捕捉到一个ValueError异常),我希望“可疑”的行进入一个单独的字典,以便手动处理。

我的问题是:由于我的第一个字典(DictReader返回的对象)的所有键都设置正确,我如何将仅键复制到第二个字典(我只想成为可疑行的字典)中进行手动处理?

我一直在玩弄dict.fromkeys()之类的东西,现在我什么也没得到。停下!

编辑:粘贴我的一些错误代码。为了我的密码而躲起来。别评判我!;-)

unsure_rows = dict.fromkeys(dict(csv_reader).keys(), [])
for row in csv_reader:
#   if row['Start Time'] != 'None':
    try:
        if before_date > strptime(row['Start Time'], '%Y-%m-%d %H:%M:%S') > after_date:
            continue
    except ValueError:
        unsure_rows += row

值错误:字典更新序列元素0的长度为13;需要2


Tags: csvdateif字典time手动startdict
3条回答

你很接近。尝试:

dict.fromkeys(my_csv_dict.keys(),[])

这将使用从CSV文件中解析的相同键初始化一个字典,每个键都将映射到一个空列表(我假设,您会将可疑的行值附加到该列表)。


试试这个。(这里有一些细微的更改是必需的,比如在开始读取CSV之前,不能初始化不确定的行。)

unsure_rows = None
for row in csv_reader:
#   if row['Start Time'] != 'None':
    try:
        if before_date > strptime(row['Start Time'], '%Y-%m-%d %H:%M:%S') > after_date:
            continue
    except ValueError:
        if not unsure_rows:
            # Initialize the unsure rows dictionary
            unsure_rows = dict.fromkeys(csv_reader.fieldnames,[])
        for key in unsure_rows:
            unsure_rows[key].append(row[key])

您不想将“just the keys”复制到另一个字典,但是如果您有“just the keys”,您将有一个集合

要从dictd获取密钥,只需说d.keys()

这将返回一个列表(具有任意顺序的键),您可以将其保存为列表或复制到

set(d.keys())

示例:

>>> d = {'one': 1, 'three': 3, 'two': 2, 'four': 4} 
>>> set(d.keys())
set(['four', 'one', 'three', 'two'])

编辑

现在我看到您打算在捕获异常时捕获可疑的键值对。在这种情况下,只要从一个空字典开始

suspect = {}

在你的代码中,我可以想象是某种循环,添加可疑的键值对,如下所示:

while something():
    k, v = generate_pair()
    try:
        analyze_something_with_k_and_v_that_might_throw_an_exception
        add_it_to_regular_dict
    except:
        suspect[k] = v

你试过了吗:

newd = dict.fromkeys(origdict)

是吗?如果这对你不起作用,那么请添加更多关于错误的详细信息。

相关问题 更多 >