我有以下列表,其中包含具有不同值的重复汽车注册号.我想把它转换成一个字典,接受汽车注册号的多个键.到目前为止,当我尝试将列表转换为字典时,它消除了其中一个键.有人可以告诉我如何使用重复键创建字典列表是:
EDF768, Bill Meyer, 2456, Vet_Parking
TY5678, Jane Miller, 8987, AgHort_Parking
GEF123, Jill Black, 3456, Creche_Parking
ABC234, Fred Greenside, 2345, AgHort_Parking
GH7682, Clara Hill, 7689, AgHort_Parking
JU9807, Jacky Blair, 7867, Vet_Parking
KLOI98, Martha Miller, 4563, Vet_Parking
ADF645, Cloe Freckle, 6789, Vet_Parking
DF7800, Jacko Frizzle, 4532, Creche_Parking
WER546, Olga Grey, 9898, Creche_Parking
HUY768, Wilbur Matty, 8912, Creche_Parking
EDF768, Jenny Meyer, 9987, Vet_Parking
TY5678, Jo King, 8987, AgHort_Parking
JU9807, Mike Green, 3212, Vet_Parking
Run Code Online (Sandbox Code Playgroud)
我试过的代码是:
data_dict = {}
data_list = []
def createDictionaryModified(filename): …Run Code Online (Sandbox Code Playgroud) 这似乎不起作用:
from typing import NewType
MyStr = NewType("MyStr", str)
x = MyStr("Hello World")
isinstance(x, MyStr)
Run Code Online (Sandbox Code Playgroud)
我什至不明白False,但TypeError: isinstance() arg 2 must be a type or tuple of types因为MyStr是一个函数并且isinstance需要一个或多个type。
甚至assert type(x) == MyStr失败is MyStr。
我究竟做错了什么?
我想要一种 python 类型提示友好的方式来创建一个具有约束值范围的类型。
例如,基于类型的URL类型str只接受看起来像“http”URL 的字符串。
# this code is made up and will not compile
class URL(typing.NewType('_URL', str)):
def __init__(self, value: str, *args, **kwargs):
if not (value.startswith('http://') or value.startswith('https://')):
raise ValueError('string is not an acceptable URL')
Run Code Online (Sandbox Code Playgroud) 当我尝试设置继承自的类的参数的值时,会引发错误str.只有当我尝试访问参数时才会发生错误myClass(arg = 'test').错误是:
TypeError: 'arg' is an invalid keyword argument for this function
Run Code Online (Sandbox Code Playgroud)
问题显示在此示例中:
class A(str):
def __init__(self, arg):
pass
A("test") # Works well
A(arg = "test") # Fails
Run Code Online (Sandbox Code Playgroud)
只有最后一行才会引发错误.前一行效果很好.问题与从int或继承的类相同float.
更新(解决方案):
我找到了这些链接的解决方案:
解决方案是:
class A(str):
def __new__(cls, *args, **kwargs):
return str.__new__(cls)
def __init__(self, arg01):
print(arg01)
A(arg01= "test")
Run Code Online (Sandbox Code Playgroud)
我不确切知道为什么会有效,我会对此进行调查.如果有人有明确的解释,我很感兴趣,我提前感谢他.
更新(我的解释):
我不确定我会说什么,但这就是我所理解的.
想象一下'myClass'没有任何遗产的课程.当我这样做时myInstance = myClass(),会发生以下情况:
该方法myClass.__new__被执行.此方法将创建对象myInstance.__new__是真正的构造函数(__init__不是构造函数!).在伪代码中,__new__看起来像这样:
def __new__ …Run Code Online (Sandbox Code Playgroud) 可能重复:
从str或int继承
嗨伙计,
我试图继承int类没有任何成功.这是我的尝试:
class SpecialInt(int):
def __init__(self, x, base=10, important_text=''):
int.__init__(self, x, base)
self.important_text=important_text
Run Code Online (Sandbox Code Playgroud)
如果我执行以下操作:
integer = SpecialInt(123, 10, 'rage of the unicorns')
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
TypeRror: int() takes at most 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?:)
我想知道的继承是如何工作的int,list,string和其他稳定的类型.
基本上我只是继承了这样一个类:
class MyInt(int):
def __init__(self, value):
?!?!?
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄明白,我如何设置它的设置值int?如果我这样做,self.value = value那么我的课将被这样使用:
mi = MyInt(5)
print(mi.value) # prints 5
Run Code Online (Sandbox Code Playgroud)
而我想像这样使用它:
mi = MyInt(5)
print(mi) # prints 5
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我有一个字符序列,如果你愿意,我会有一个字符串,但我想存储有关字符串原点的元数据.另外,我想提供一个简化的构造函数.
我尝试过str像Google为我解决的那样多的方式扩展课程.我来的时候就放弃了;
class WcStr(str):
"""wc value and string flags"""
FLAG_NIBBLES = 8 # Four Bytes
def __init__(self, value, flags):
super(WcStr, self).__init__()
self.value = value
self.flags = flags
@classmethod
def new_nibbles(cls, nibbles, flag_nibbles=None):
if flag_nibbles is None:
flag_nibbles = cls.FLAG_NIBBLES
return cls(
nibbles[flag_nibbles+1:],
nibbles[:flag_nibbles]
)
Run Code Online (Sandbox Code Playgroud)
当我将两个参数注释掉为@classmethod's cls()时,它会给我这个错误:
TypeError: __init__() takes exactly 3 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
非常典型,错误的args错误数,
使用另外两个参数(例如,如示例代码所示):
TypeError: str() takes at most 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)
我试过改变它__init__的args,它super().__init__的args,似乎都没有改变.
只有一个参数传递给cls(...)调用,正如str类的错误所要求的那样,我得到了这个:
TypeError: __init__() takes …Run Code Online (Sandbox Code Playgroud) python ×6
class ×2
inheritance ×2
int ×2
string ×2
built-in ×1
dictionary ×1
list ×1
overloading ×1
python-2.7 ×1
python-3.x ×1
subclassing ×1