鱼C论坛

 找回密码
 立即注册
楼主: wrpython

[已解决]字典嵌套列表,列表元素为字典,添加列表元素后报错

[复制链接]
 楼主| 发表于 2023-12-8 02:02:55 | 显示全部楼层
能调整一下代码格式吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 02:03:21 | 显示全部楼层
wrpython 发表于 2023-12-08 02:02
能调整一下代码格式吗

当然,以下是调整过格式后的代码示例:
  1. data = {}  # 创建一个空字典
  2. for tos in stk:
  3.     sym = tos.split('=')
  4.    
  5.     if sym not in jd:
  6.         jd.add(sym)
  7.         ks = now - now % 300
  8.         js = ks + 300
  9.         
  10.         sjz = {'symbol': sym, 'price': pri, 'size': size, 'mmid': mmid, 'time': time1, 'now': now}
  11.         
  12.         if sym not in data:
  13.             data[sym] = []  # 如果sym不在data字典中,创建一个空列表
  14.         
  15.         data[sym].append(sjz)  # 将sjz添加到对应的sym的列表中
  16.         
  17.         print(sjz)
  18.         print(data)
复制代码

在上面的代码中,我们使用了缩进和换行来使代码更加清晰易读。同时,我们使用 `data[sym]` 来表示每个 `sym` 对应的列表,并将 `sjz` 添加到对应的列表中。这样就可以保证每个 `sym` 对应一个独立的列表。

希望这次的代码格式调整能够满足你的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-8 02:21:23 | 显示全部楼层
有点疑惑,在我之前的代码里
  1. sjz = {
  2.                 'symbol':sym,
  3.                 'price':pri,
  4.                 'size':size,
  5.                 'mmid':mmid,
  6.                 'time':time1,
  7.                 'now':now
  8.                 }
  9.                         
  10.             data[sym].append(sjz)
复制代码

sjz中已经对sym的进行了赋值,那么data[sym]中的sym就应该与sjz的sym一致,为什么会出现不一致呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 02:21:45 | 显示全部楼层
wrpython 发表于 2023-12-08 02:21
有点疑惑,在我之前的代码里
sjz = {
              ...

非常抱歉,之前的回答中存在误解。你是正确的,根据你提供的代码,`sjz` 字典中的 `sym` 已经被正确赋值了,确保了 `data` 中的 `sym` 与 `sjz` 的 `sym` 是一致的。因此,不应该出现不一致的情况。

问题可能出在其他地方,我看到你之前提到过报错信息中显示了 `'INTZ.NQ': , 'ks': 33000, 'js': 33300`,这可能是导致混淆的原因。在字典中使用逗号分隔键值对时,如果值为空(缺失),最好省略该键值对。因此,可能需要检查代码中是否存在错误或遗漏的语法。

另外,请确保 `sym` 的值是按照预期进行传递的,可以使用 `print(sym)` 来打印 `sym` 的具体值,以便进一步调试。

如果问题仍然存在,我建议你提供更多的代码和详细的错误信息,以便我更好地帮助你解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-8 02:23:44 | 显示全部楼层
`'INTZ.NQ': , 'ks': 33000, 'js': 33300` 中,INTZ.NQ的值暂时为空列表[],可以么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 02:24:03 | 显示全部楼层
wrpython 发表于 2023-12-08 02:23
`'INTZ.NQ': , 'ks': 33000, 'js': 33300` 中,INTZ.N ...

非常抱歉之前的回答有误。你提到的 `'INTZ.NQ': , 'ks': 33000, 'js': 33300` 中的 `'INTZ.NQ':` 是一个错误的语法,字典中的键值对应该以 `键: 值` 的形式存在。

如果你想让 `'INTZ.NQ'` 对应的值是一个空列表,可以将其设置为 `[]`,即 `data['INTZ.NQ'] = []`。这样就能确保 `'INTZ.NQ'` 在 `data` 字典中对应的值是一个空列表。

以下是修改后的代码示例:
  1. data = {}
  2. for tos in stk:
  3.     sym = tos.split('=')
  4.     if sym not in jd:
  5.         jd.add(sym)
  6.         ks = now - now % 300
  7.         js = ks + 300
  8.         data[sym] = []  # 将 sym 对应的值设为一个空列表
  9.         sjz = {
  10.             'symbol': sym,
  11.             'price': pri,
  12.             'size': size,
  13.             'mmid': mmid,
  14.             'time': time1,
  15.             'now': now
  16.         }
  17.         data[sym].append(sjz)  # 将 sjz 添加到 sym 对应的列表中
  18.         print(sjz)
  19.         print(data)
复制代码

在上面的代码中,我们使用 `data[sym] = []` 来将每个 `sym` 对应的值设为一个空列表。然后,通过 `data[sym].append(sjz)` 将 `sjz` 添加到对应的列表中。这样可以确保 `sjz` 的 `sym` 与 `data` 中的 `sym` 一致,并且每个 `sym` 对应一个独立的列表。

非常抱歉之前的回答可能给你造成了困惑。希望这次的修改能够正确解决你的问题。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-8 03:55:32 | 显示全部楼层
字典1-列表-字典2的结构中,如何遍历提取字典2中的值呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 03:55:52 | 显示全部楼层
wrpython 发表于 2023-12-08 03:55
字典1-列表-字典2的结构中,如何遍历提取字典2中的值 ...

如果你有一个字典1-列表-字典2的嵌套结构,并想要遍历提取字典2中的值,可以使用嵌套的循环来实现。以下是一个示例代码,演示如何遍历提取字典2中的值:
  1. data = {
  2.     'dict1': [
  3.         {
  4.             'key1': 'value1',
  5.             'key2': 'value2',
  6.             'key3': 'value3'
  7.         },
  8.         {
  9.             'key4': 'value4',
  10.             'key5': 'value5',
  11.             'key6': 'value6'
  12.         }
  13.     ]
  14. }
  15. # 遍历字典1中的列表
  16. for item in data['dict1']:
  17.     # 遍历字典2的键值对
  18.     for key, value in item.items():
  19.         print(key, value)
复制代码

在上述代码中,我们首先通过 `data['dict1']` 访问到字典1中的列表。然后使用一个循环遍历列表中的每个元素(即字典2)。接着,再次使用一个循环遍历字典2中的键值对,通过 `item.items()` 方法获取到键值对。最后,可以根据具体需求对键和值进行操作。

希望这个示例能够帮助你理解如何在字典1-列表-字典2的结构中遍历提取字典2中的值。如有任何疑问,请随时追问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-8 03:59:12 | 显示全部楼层
能使用列表推导式或者字典推导式完成吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 03:59:34 | 显示全部楼层
wrpython 发表于 2023-12-08 03:59
能使用列表推导式或者字典推导式完成吗?

是的,你可以使用列表推导式或字典推导式来遍历和提取字典2中的值。以下是使用列表推导式和字典推导式的示例代码:

使用列表推导式提取字典2中的值:
  1. data = {
  2.     'dict1': [
  3.         {'key1': 'value1', 'key2': 'value2'},
  4.         {'key3': 'value3', 'key4': 'value4'}
  5.     ]
  6. }
  7. values = [value for item in data['dict1'] for value in item.values()]
  8. print(values)
复制代码
在上述代码中,我们使用列表推导式 `[value for item in data['dict1'] for value in item.values()]` 来遍历 `data['dict1']` 中的每个字典,并提取其中的值。最终,将提取的值存储在列表 `values` 中。

使用字典推导式提取字典2中的值:
  1. data = {
  2.     'dict1': [
  3.         {'key1': 'value1', 'key2': 'value2'},
  4.         {'key3': 'value3', 'key4': 'value4'}
  5.     ]
  6. }
  7. values = {value for item in data['dict1'] for value in item.values()}
  8. print(values)
复制代码
这次我们使用字典推导式 `{value for item in data['dict1'] for value in item.values()}` 来遍历 `data['dict1']` 中的每个字典,并提取其中的值。最终,将提取的值存储在集合 `values` 中。

希望这个示例满足了你的需求。无论是使用列表推导式还是字典推导式,都可以快速遍历和提取字典2中的值。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-8 04:15:11 | 显示全部楼层
将字典2中每次提取出来的值添加到一个新集合中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 04:15:27 | 显示全部楼层
wrpython 发表于 2023-12-08 04:15
将字典2中每次提取出来的值添加到一个新集合中

如果你想将字典2中提取出来的值添加到一个新的集合中,你可以使用集合推导式来实现。以下是示例代码:data = {    'dict1': }new_set = {value for item in data for value in item.values()}print(new_set)在上述代码中,我们使用了集合推导式 `{value for item in data for value in item.values()}` 来遍历 `data` 中的每个字典,并提取其中的值。然后,将提取的值添加到新的集合 `new_set` 中。最终,打印输出新的集合。希望这个示例能够帮助你解决问题。如果还有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-8 07:32:14 | 显示全部楼层
从日志文件中向列表添加元素,第一个元素和最后一个元素保留,中间的元素加入后比较极值再抛出,该怎么写代码呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 07:32:46 | 显示全部楼层
wrpython 发表于 2023-12-08 07:32
从日志文件中向列表添加元素,第一个元素和最后一个元 ...

如果你想从日志文件中向列表添加元素,并且只保留第一个元素和最后一个元素,对于中间的元素,你希望比较极值后再抛出,你可以按照以下步骤编写代码:

1. 打开日志文件并读取数据。
2. 创建一个空列表 `data`,用于存储要添加的元素。
3. 使用循环遍历读取到的数据。
4. 在每次循环中,将当前的元素添加到 `data` 列表中。
5. 在循环结束后,检查 `data` 列表的长度。如果长度小于等于2,则无需比较极值,直接输出 `data` 列表。
6. 如果 `data` 列表的长度大于2,则使用切片操作获取中间部分的子列表。
7. 对子列表进行极值比较,根据需要选择最大值或最小值。
8. 根据极值的索引在原始 `data` 列表中截取相应的子列表。
9. 将截取后的子列表与首尾元素合并,输出最终结果。

下面是一个示例代码,演示了如何实现上述步骤:
  1. # 打开日志文件并读取数据
  2. with open("log.txt", "r") as file:
  3.     lines = file.readlines()
  4. # 创建一个空列表用于存储数据
  5. data = []
  6. # 遍历读取到的数据
  7. for line in lines:
  8.     # 去除换行符并添加到data列表
  9.     data.append(line.strip())
  10. # 检查data列表的长度
  11. if len(data) <= 2:
  12.     print(data)  # 输出data列表
  13. else:
  14.     # 获取中间部分的子列表
  15.     middle = data[1:-1]
  16.    
  17.     # 进行极值比较,这里示例选择最大值
  18.     max_value = max(middle)
  19.    
  20.     # 根据极值的索引截取相应的子列表
  21.     index = middle.index(max_value)
  22.     sub_list = middle[:index + 1]
  23.     # 将截取后的子列表与首尾元素合并
  24.     result = [data[0]] + sub_list + [data[-1]]
  25.    
  26.     # 输出最终结果
  27.     print(result)
复制代码

请将上述代码中的 `"log.txt"` 替换为你实际的日志文件路径。这段代码会打开日志文件,读取数据,并根据需求进行处理和输出。希望这个示例能帮助你完成你的需求。如有任何问题,请随时追问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-8 07:35:31 | 显示全部楼层
如果日志是在不断实时更新的呢,无法确定其包含的元素有多少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 07:35:48 | 显示全部楼层
wrpython 发表于 2023-12-08 07:35
如果日志是在不断实时更新的呢,无法确定其包含的元素 ...

如果日志是实时更新的,无法确定其包含的元素数量,你可以使用一个循环来不断读取新的日志,并根据需要处理和添加元素。以下是可能的实现方式:
  1. data = []  # 创建一个空列表
  2. # 循环读取日志
  3. while True:
  4.     # 读取新的日志,假设read_log()函数用于读取新的日志行
  5.     log_line = read_log()
  6.     # 如果获取到的日志为空,则终止循环
  7.     if not log_line:
  8.         break
  9.     # 处理日志行并添加数据到列表
  10.     data.append(process_log_line(log_line))
  11. # 输出处理后的数据
  12. print(data)
复制代码
在上述代码中,我们通过一个无限循环来不断读取新的日志行(假设使用`read_log()`函数)。然后,我们使用`process_log_line()`函数来处理每个日志行,根据需要从中提取有用的数据。这些数据将被添加到名为`data`的列表中。当获取到一个空日志时,我们通过`break`语句终止循环,并输出处理后的数据。

请注意,此示例只是一个基本框架,你需要根据你的具体需求自定义`read_log()`和`process_log_line()`函数来读取和处理日志。希望这个示例能帮助你解决问题。如有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-8 07:52:36 | 显示全部楼层
如何去除列表里除首位和末尾以外的所有的元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 07:52:57 | 显示全部楼层
wrpython 发表于 2023-12-08 07:52
如何去除列表里除首位和末尾以外的所有的元素

要从列表中去除除首位和末尾以外的所有元素,你可以使用切片操作。切片操作可以按照指定的范围获取列表的子列表。以下是一个示例代码,演示如何实现:lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]# 使用切片操作获取首位和末尾元素以外的子列表new_lst = lst[1:-1]print(new_lst)在上述代码中,我们使用切片操作 `lst[1:-1]` 来获取列表的子列表。切片操作中的 `1` 表示起始索引,意味着从第二个元素开始。`-1` 表示结束索引,意味着倒数第一个元素之前。因此,切片操作 `lst[1:-1]` 将返回列表 `lst` 中除首位和末尾元素以外的所有元素。最后,我们将结果存储在 `new_lst` 变量中,并进行打印输出。希望这个示例能帮助你解决问题。如果还有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-8 07:54:06 | 显示全部楼层
列表中只保留首位和末位元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 07:54:18 | 显示全部楼层
wrpython 发表于 2023-12-08 07:54
列表中只保留首位和末位元素

如果你想要从列表中去除除首位和末位以外的所有元素,可以使用以下方法来实现:lst =   # 假设这是你的原始列表new_lst = [lst[0], lst[-1]]  # 创建一个只包含首位和末位元素的新列表print(new_lst)在上述代码中,我们创建了一个新的列表 `new_lst` ,其中只包含原始列表 `lst` 的首位元素 `lst[0]` 和末位元素 `lst[-1]`。通过访问列表的索引,我们可以只获取首位和末位元素,并将它们添加到新的列表中。最后,打印输出新的列表 `new_lst`,即只包含首位和末位元素的列表。希望这个示例能帮助你解决问题。如有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表