我有一个名为df_following的列表,它看起来像这样:
[('henrysimanjun13', following
henrysimanjun13 [AndiDar59797467]), ('hamdalah47', Empty DataFrame
Columns: []
Index: []), ('vivoslot', following
vivoslot [AprillParis, liputan6dotcom, detikcom]), ('KacangTopless',
following
KacangTopless [mohmahfudmd, CallMeNayr, siti_dama]), ('infosantuy1',
following
infosantuy1 [OneLouderApps, DakwahJateng, setkabgoid, okez...)]
print ("df_following[0]: ", df_following[0][0])
--> df following[0]: buin83
print ("df_following[0]: ", df_following[0][1]['following'][0][0])
--> df following[0]: AkuDutaDamai
从上面的列表中,我想做出这样的东西:
{buin83, AkuDutaDamai},{buin83, FarlinaYaz}, {buin83, Mom_isback}, {buin83, yosiago}, {killjoyyadi, susipudjiastuti}, {killjoyyadi, PetrusBun},..
我试着:
d = {}
for l in df_following:
username = l[0][0]
following = l[0][1]['following'][0][0]
if username in d:
d[username][following] = [following]
else:
d[username] = {username,following}
但我得到以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-135-437589d2001c> in <module>
3 for l in df_following:
4 username = l[0][0]
----> 5 following = l[0][1]['following'][0][0]
6
7 if username in d:
TypeError: string indices must be integers
我不知道我的代码出了什么问题。任何建议吗? 问题来源StackOverflow 地址:/questions/59386757/typeerror-string-indices-must-be-integers-lists-and-dictionary-in-python
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的代码中遇到的TypeError: string indices must be integers
错误,是因为在某些情况下,你尝试以索引方式访问字符串(即使用[]
),而实际上应该访问的是字典或列表结构。根据你的数据结构描述,问题可能出在某些列表项没有预期的嵌套结构,导致在尝试访问l[0][1]['following'][0][0]
时出现问题。
为了处理这种情况并避免错误,你可以增加一些检查来确保在进行索引操作之前,数据是正确的类型和结构。下面是一个修改后的版本,它包含了对数据结构的检查:
d = {}
for l in df_following:
# 确保列表项至少有两个元素
if len(l) < 2:
continue
username = l[0]
# 检查是否存在following信息且它是一个非空列表
following_info = l[1]
if isinstance(following_info, dict) and 'following' in following_info and isinstance(following_info['following'], list) and following_info['following']:
following = following_info['following'][0]
# 确保following也是一个可以索引的结构
if isinstance(following, tuple) or isinstance(following, list):
following = following[0] if following else None
else:
following = following
else:
# 如果没有有效的following信息,则跳过此循环
continue
# 使用set来避免重复,并保持集合的特性
if username in d:
if isinstance(d[username], set):
d[username].add(following)
else: # 如果已经是字典或其他非集合类型,转换为集合
d[username] = set(d[username])
d[username].add(following)
else:
d[username] = {following}
# 如果需要,可以将集合转换回列表
d = {k: list(v) for k, v in d.items()}
这段代码首先增加了对每个列表项结构的检查,确保在访问之前它们符合预期的格式。如果某个用户的following信息不存在或者不符合预期的格式,该用户会被跳过,从而避免了错误。同时,使用集合(set)来存储跟随者,以自动去除重复项,并在最后根据需要将其转换回列表。